Я создал Dockerfile (для узла JNLP , который можно использовать с Kubernetes Plugin of Jenkins ).Я продолжаю с официального изображения jenkinsci/jnlp-slave
FROM jenkinsci/jnlp-slave
USER root
MAINTAINER Aryak Sengupta <aryak.sengupta@hyland.com>
LABEL Description="Image for NodeJS slave"
COPY cert.crt /usr/local/share/ca-certificates
RUN update-ca-certificates
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash \
&& apt-get install -y nodejs
ENTRYPOINT ["jenkins-slave"]
Я сохранил это изображение в своем шаблоне Pod (в конфигурации плагина K8s).Теперь, когда я пытаюсь запустить сборку на этом slave , я обнаруживаю, что внутри Pod появляются два контейнера (снимок экрана, подтверждающий то же самое).
Мой шаблон Pod выглядит следующим образом:
И моя конфигурация Kubernetes выглядит следующим образом:
Теперь, если я сделаю простое docker ps
, я обнаружу, что запустились два контейнера (почему?):
Теперь, внутри конфигурации Jenkins Job в Jenkins, все, что я добавляю на этапе сборки, выполняет шаги в первом контейнере.
Даже если я использую официальный контейнер Node
внутри моего PodTemplate
, результат все тот же:
Я попытался напечатать версию Node внутри моей работы Jenkins, и выдается "Node not found" .Кроме того, чтобы проверить, что я догадался, я сделал docker exec
во втором контейнере и попытался напечатать Node
версию.В этом случае все работает абсолютно нормально.
Вот так выглядит мой шаг сборки:
Итак, чтобы свести его к минимуму, у меня есть два основных вопроса:
- Почему два отдельных (один для JNLP и один со всеми пользовательскими изменениями) контейнера запускаются всякий раз, когда я запускаю задание Jenkins?
- Почему моя работа выполняется в первом контейнере, где Node не установлен?Как мне добиться желаемого поведения при построении моего проекта с помощью
Node
с использованием этой конфигурации?
Чего мне не хватает?
PS - Пожалуйста, дайте мне знать, если вопрос окажется неясным в некоторых частях.
Редактировать: Я понимаю, что это можно сделать с помощью плагина Pipeline
Jenkins, где я могу явно указать имя container
, но мне нужно сделать это из пользовательского интерфейса Jenkins.Есть ли способ указать имя контейнера вместе с именем ведомого, которое я уже делаю так: