Дженкинс о Кубернетесе в Хелме - как прикрепить ключи s sh к агенту - PullRequest
1 голос
/ 21 апреля 2020

Я использую Jenkins из stable/jenkins рулевой диаграммы - все хорошо, я прикрепил секреты с ключом id_rsa / .pub в качестве тома к мастеру jenkins (в /opt/sshkeys/ скажем, почему там? Потому что созданные файлы soft-link с разрешениями 777, поэтому go не может напрямую $HOME/.ssh)

root@agent-pod:/opt/config# ls -alh
total 12K
drwxrwxrwx 3 root root 4.0K Apr 20 13:00 .
drwxr-xr-x 1 root root 4.0K Apr 20 13:02 ..
drwxr-xr-x 2 root root 4.0K Apr 20 13:00 ..2020_04_20_13_00_29.601158101
lrwxrwxrwx 1 root root   31 Apr 20 13:00 ..data -> ..2020_04_20_13_00_29.601158101
lrwxrwxrwx 1 root root   13 Apr 20 13:00 id_rsa -> ..data/id_rsa

, а затем запускается несколько сценариев (cp, chmod), чтобы переместить их как нужные файлы в /home/jenkins/.ssh/id_rsa - проблемы с агент jenkins - я не могу просто подключить том, как описано выше, по причине 777, и я не могу использовать какую-либо команду на агенте, поскольку основная команда ENTRYPOINT - это та, которая делает его агентом

command:
args: "${computer.jnlpmac} ${computer.name}"
  • попытка сделать любую комбинацию mkdir /home/jenkins/.ssh && chmod ... && <above args> или ; переводит модуль go в 0/1 Completed состояние, а не 1/1 Running

Кто-нибудь знает, как поставить два ключа и паба в агента Дженкинса? Это главный вопрос. Все остальное, что я только что сказал, это мой способ ее решения.

Часть плагина Kubernetes для Jenkins (который требуется при запуске Jenkins на Kubernetes) показывает это:

Constraints
Multiple containers can be defined in a pod. One of them is automatically created with name
jnlp, and runs the Jenkins JNLP agent service, with args ${computer.jnlpmac} ${computer.name},
and will be the container acting as Jenkins agent.

Other containers must run a long running process, so the container does not exit. If the default 
entrypoint or command just runs something and exit then it should be overridden with something
like cat with ttyEnabled: true.

WARNING If you want to provide your own Docker image for the JNLP slave, you must name the
container jnlp so it overrides the default one. Failing to do so will result in two slaves 
trying to concurrently connect to the master.

PS: I см. официальные документы, описывающие, как прикрепить ключи к pod здесь https://kubernetes.io/docs/concepts/configuration/secret/#use -cases (ctrl + f Use-Case: Pod with ssh keys), но я столкнулся с проблемой, как указано выше, с 777

PS: чтобы увидеть как выглядят файлы развертывания и значений и тестируются, вы можете установить helm3 и helm3 show values stable/jenkins > jenkins.yaml

1 Ответ

0 голосов
/ 23 апреля 2020

Как отметил @potatopotato в комментариях, он решил эту проблему, создав nfs сервер и подключив его в качестве тома к агенту, с ручным помещением туда ключей.


I рекомендовал бы проверить этот носитель article , поскольку он хорошо описывает, как это должно быть сделано, все ресурсы, упомянутые в этой статье, можно найти в этом git репозитории

Этот git репозиторий содержит файлы, необходимые для запуска демонстрационной версии для развертывания

  • мастера Jenkins
  • агента Jenkins с постоянным томом

Более точно проверьте эту часть.

Связь между мастером и агентом

Существует несколько способов, которыми мастер и агент Jenkins могут соединяться друг с другом. Мы установим это соединение от мастера Jenkins через S SH, используя учетные данные S SH для защиты соединения. Этот подход требует, чтобы мы установили подключаемый модуль s sh -slaves к нашему главному устройству, смонтировали учетные данные s sh в главном устройстве и агенте и основали наш агент на образе s sh -slave.

Кроме того, мастеру Jenkins необходимо подключиться к каждому агенту через уникальные имена хостов * stati c, которые мы получаем при развертывании наших агентов с помощью StatefulSet.

Инициализация агента ( s)

Мастер Jenkins не будет подключаться к агенту на основе s sh, если он не настроен для этого. Мы можем bootstrap эту конфигурацию, предоставив каждому агенту модуль инициализации, отвечающий за настройку мастера Jenkins. К моменту запуска агента мастер Jenkins уже будет пытаться подключиться.

Контейнеру Init потребуется выполнить следующее:

  • Загрузить CLI Jenkins от мастера
  • Используйте интерфейс командной строки, чтобы проверить, настроен ли мастер для использования этого агента
  • При необходимости используйте интерфейс командной строки для настройки мастера на использование этого агента

Для этого потребуется некоторое Конфигурация в нашем модуле агента:

  • fsGroup, установленной для группы пользователей «jenkins». Это необходимо, потому что постоянные тома монтируются как пользователь root по умолчанию, что делает их непригодными для пользователя «jenkins».
  • Переменные среды в контейнере Init: JENKINS_URL: http-адрес мастера Jenkins JENKINS_LABEL: метка для наш агент
  • Переменные среды в главном контейнере: JENKINS_SLAVE_SSH_PUBKEY: publi c ключ для аутентификации попыток подключения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...