#jenkins #ssh #gitlab
#дженкинс #ssh #gitlab
Вопрос:
Я настраиваю Jenkins на своем сервере ubuntu и пытаюсь создать задание автоматической сборки. Мой план состоит в том, что на моем локальном компьютере после того, как я выполню git push в главную ветку в репозитории приложений, Дженкинс на моем сервере Ubuntu получит последнюю главную ветку и запустит приложение.
Я настроил Jenkins и настроил с помощью Gitlab с большинством шагов успешно:
- Я создал личный токен доступа в Gitlab и настроил токен на сервере Jenkins.
- Я настроил задание автоматической сборки и выбрал
Build when a change is pushed to GitLab. GitLab webhook URL: http://35.222.111.55:8080/project/test
; Я создал секретный токен и настроил репозиторий Gitlab с интеграцией webhook. - В конфигурации задания автоматической сборки Jenkins в
Source Code Management
разделе я предоставил URL-адрес репозитория gitlab и учетные данные (имя пользователя SSH с закрытым ключом), чтобы Дженкинс мог извлекать данные из репозитория.
Когда я нажимаю на главную ветку на своем локальном компьютере, Дженкинс успешно запускает сборку. Однако это выдает ошибку на шаге git pull
из репозитория:
cd /home/John/jenkins_test/
git pull
git@code.myapp.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Build step 'Execute shell' marked build as failure
Finished: FAILURE
Это произошло потому, что в пункте 3 выше закрытый ключ SSH, который я предоставил, принадлежит пользователю по умолчанию. Когда Дженкинс запускает сборку, он выполняет действия через другого пользователя. Я провел некоторое исследование и обнаружил:
- Дженкинс создает
jenkins
пользователя в ubuntu при его установке. - Когда Дженкинс пытается создать и выполнить оболочку, например
git pull
, шаг, он использует для этогоjenkins
пользователя.
Это означает, что когда я настраиваю CI / CD с помощью Jenkins и gitlab на сервере ubuntu, мне нужно:
su - jenkins
чтобы переключиться наjenkins
пользователя и сделатьssh-keygen -o -t rsa -b 4096
, чтобы создать пару ключей SSH для пользователя. Затем сохраните этот SSH-ключ в gitlab.- После того, как я впервые
git clone my-repo
на сервере ubuntu, мне нужно зайтиmy-repo/.git
и сделатьsudo chown -R jenkins .git/
, чтобы предоставитьjenkins
пользователю разрешения на выполнениеgit pull
- Для любых других шагов в сборке, например, для создания каталога или удаления файла / каталога, мне нужно вручную зайти на сервер ubuntu и сначала предоставить соответствующие разрешения
jenkins
пользователю.
Почему нет официальной документации относительно этих шагов?
Кроме того, когда я su - jenkins
переключаюсь на пользователя, он запрашивает пароль. Как узнать, какой пароль он дал пользователю при создании этого пользователя в установке Jenkins???
Все это кажется чрезмерно сложным, и я думаю, что я, должно быть, сделал что-то не так. Чего мне не хватает?