Дженкинс: путаница в отношении пользователя ubuntu «jenkins» и отказано в разрешении SSH от gitlab

#jenkins #ssh #gitlab

#дженкинс #ssh #gitlab

Вопрос:

Я настраиваю Jenkins на своем сервере ubuntu и пытаюсь создать задание автоматической сборки. Мой план состоит в том, что на моем локальном компьютере после того, как я выполню git push в главную ветку в репозитории приложений, Дженкинс на моем сервере Ubuntu получит последнюю главную ветку и запустит приложение.

Я настроил Jenkins и настроил с помощью Gitlab с большинством шагов успешно:

  1. Я создал личный токен доступа в Gitlab и настроил токен на сервере Jenkins.
  2. Я настроил задание автоматической сборки и выбрал Build when a change is pushed to GitLab. GitLab webhook URL: http://35.222.111.55:8080/project/test ; Я создал секретный токен и настроил репозиторий Gitlab с интеграцией webhook.
  3. В конфигурации задания автоматической сборки 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, который я предоставил, принадлежит пользователю по умолчанию. Когда Дженкинс запускает сборку, он выполняет действия через другого пользователя. Я провел некоторое исследование и обнаружил:

  1. Дженкинс создает jenkins пользователя в ubuntu при его установке.
  2. Когда Дженкинс пытается создать и выполнить оболочку, например git pull , шаг, он использует для этого jenkins пользователя.

Это означает, что когда я настраиваю CI / CD с помощью Jenkins и gitlab на сервере ubuntu, мне нужно:

  1. su - jenkins чтобы переключиться на jenkins пользователя и сделать ssh-keygen -o -t rsa -b 4096 , чтобы создать пару ключей SSH для пользователя. Затем сохраните этот SSH-ключ в gitlab.
  2. После того, как я впервые git clone my-repo на сервере ubuntu, мне нужно зайти my-repo/.git и сделать sudo chown -R jenkins .git/ , чтобы предоставить jenkins пользователю разрешения на выполнение git pull
  3. Для любых других шагов в сборке, например, для создания каталога или удаления файла / каталога, мне нужно вручную зайти на сервер ubuntu и сначала предоставить соответствующие разрешения jenkins пользователю.

Почему нет официальной документации относительно этих шагов?

Кроме того, когда я su - jenkins переключаюсь на пользователя, он запрашивает пароль. Как узнать, какой пароль он дал пользователю при создании этого пользователя в установке Jenkins???

Все это кажется чрезмерно сложным, и я думаю, что я, должно быть, сделал что-то не так. Чего мне не хватает?