Установка или обновление Jenkins — ошибка пермишенов при сборке — запуск сервиса Jenkins от юзера

Jenkins update

При установке и обновлении Jenkins, сервис в Linux стартуется от лица стандартного пользователя «jenkins», что может приводить к ошибкам вида «wrong permissions» или подобным на фазе отработки процесса сборки проекта.

Особенно это актуально, когда идет сборка на основе репозитория и права на папке проекта принадлежат определенному пользователю. Например, ec2-user для амазонских линуксов, или ubuntu — для убунту, соответственно.

В таком случае, требуется запускать сервис Jenkins от иного пользователя, а не стандартного. И нужно сделать следующее:

  • Находим конфигурационный файл запуска сервиса Jenkins
systemctl status jenkins

и находим путь к конфигу, смотрите скриншот ниже

Jenkins status 01
jenkins status 02
  • Стопаем Jenkins и редактируем User and Group в конфиг-файле.

В случае примера со второго скрина — основной конфигурации имеет под-конфиг, в поле JENKINS_CONFIG (JENKINS_CONFIG=/etc/sysconfig/jenkins)

systemctl stop jenkins
# путь к конфигу ниже берем из подхода, описанного выше
nano /usr/lib/systemd/system/jenkins.service

Комментируем текущие User and Group и вставляем необходимые, сохраняем файл

#User=jenkins
#Group=jenkins
User=ec2-user
Group=ec2-user
  • Кроме этого, нужно назначить права на папку с jenkins для этого пользователя.

Обычно Jenkins устанавливается по пути /var/lib/jenkins/ :

chown -R ec2-user:ec2-user /var/lib/jenkins/
  • Все готово для старта сервиса Jenkins:
systemctl start jenkins

В интерфейсе Дженкинса можно проверить, что новый юзер «применился»:

Manage Jenkins -> System Information -> Environment Variables
поле — USER

Jenkins — git — собираем проект из приватного репозитория

Генерируем на целевом сервере SSH ключ

Чтобы Jenkins на нашем сервере смог получить доступ к коду из репозитория — необходимо сгенерировать приватный и публичный ключ и раздать их в соответствии с назначением.
Для генерации ключей, в терминате (консоли) сервера вводим команду

$ ssh-keygen

При этом видим предложение сгенерировать ключ по стандартному для этого случая пути

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user01/.ssh/id_rsa):

Рекомендуется выбирать дефолтный путь — жмем Enter, но вы можете и поменять путь.

Далее система попросит ввести passphrase. Для простоты можем оставить это поле пустым, как и следующее (подтверждающее ввод)

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Успешная генерация ключа сопровождается следующим выводом в консоли

Your identification has been saved in /Users/emmap1/.ssh/id_rsa.
Your public key has been saved in /Users/emmap1/.ssh/id_rsa.pub.
The key fingerprint is:
4c:80:61:2c:00:3f:9d:dc:08:41:2e:c0:cf:b9:17:69 emmap1@myhost.local
The key’s randomart image is:
+—[ RSA 2048]—-+
|*o+ooo.          |
|.+.=o+ .         |
|. *.* o .        |
| . = E o         |
|    o . S        |
|   . .           |
|     .           |
|                 |
|                 |
+——————+

Выведем сгенерированные файлы списком на экран

$ ls ~/.ssh
id_rsa id_rsa.pub

Выводится 2 файла:

id_rsa — приватный ключ, который понадобится нам для генерациия пользователя аутентификации в репозитории на cтороне Jenkins

id_rsa.pub — публичный ключ, который необходимо разместить в разделе access keys целевого репозитория

Добавляем публичный ключ в разделе ключей приватного репозитория

Например, в Bitbucket, публичный ключ можно добавить в разделе
Repository settingsAccess keysAdd key (настройки конкретного репозитория)

Добавляем приватный ключ в Jenkins

Заходим в раздел Управления Ключами (JenkinsManage JenkinsManage Credentials)

И добавляем приватный ключ (содержимое файла id_rsa.pub) в поле Private key, как проиллюстрировано ниже

Заполняем поле Username — имя для пользователя. Сохраняем.

Осталось подключится к репозиторию.

Перейдем в настройки ранее созданного проекта в Jenkins.

Source Code Management — выбираем Git (1)

Repositories — вставляем ссылку на репозиторий (2) и из выпадающего списка выбираем нашего только что созданного пользователя с приватным ключом (3)

Branches to build — обычно указывают мастер ветку — */master (4)

Сохраняем проект в Jenkins.

Теперь мы готовы собрать проект из приватного репозитория.