Мы используем конфигурацию terraform и Jenkins в качестве файла yaml для развертывания Jenkins.При определении шаблонов Kubernetes Pod, независимо от того, устанавливаем ли мы command
и args
в пустую строку или не предоставляем ее вообще, после развертывания Jenkins или обновления с новой конфигурацией оба значения по умолчанию устанавливаются в:
command: /bin/sh -c
args: cat
Это пример моего файла yaml, в котором есть конфигурация модуля и его контейнеров:
- kubernetes:
name: "kubernetes"
serverUrl: "https://kubernetes.default"
skipTlsVerify: true
namespace: "default"
credentialsId: "kubernetes_credentials"
jenkinsUrl: "http://jenkins:8080"
jenkinsTunnel: "jenkins-agent:50000"
connectTimeout: 0
readTimeout: 0
containerCapStr: 50
maxRequestsPerHostStr: 64
retentionTimeout: 5
templates:
- name: "default"
namespace: "default"
label: "jenkins-slave"
nodeUsageMode: "NORMAL"
containers:
- name: "jnlp"
image: "dtr.mydomain.com/build-tools/jenkins-build-agent:latest"
alwaysPullImage: true
workingDir: "/home/jenkins"
ttyEnabled: true
resourceRequestCpu: "200m"
resourceLimitCpu: "4"
resourceRequestMemory: "1Gi"
resourceLimitMemory: "16Gi"
- name: "dind-daemon"
image: "dtr.mydomain.com/build-tools/jenkins-build-agent-dind:1.0.0"
workingDir: "/opt"
resourceRequestCpu: "20m"
resourceRequestMemory: "512Mi"
privileged: true
- name: "mongodb"
image: "mongo"
workingDir: "/opt/mongo"
resourceRequestCpu: "20m"
resourceRequestMemory: "512Mi"
privileged: true
command: ""
args: ""
Как видно из последнего контейнера, мы устанавливаем команду и аргументы в пустую строку
command: ""
args: ""
, но, тем не менее, когда мы идем к Дженкинсу, по умолчанию они равны /bin/sh -c
и cat
, что вызывает проблемы, потому что контейнер сборки должен запускаться indenfinetly и не завершаться немедленно, а команда по умолчанию переопределяет команду, определенную в Dockerfile
изображения докера.
ПРИМЕЧАНИЕ : мы установили следующую команду в Dockerfile
наших образов докера сборки:
CMD ["sleep", "infinity"]
Так что теперь каждый раз, когда мы перераспределяем Jenkins, мы должны вручнуюудалите command
и args
в пользовательском интерфейсе Jenkins.Это ошибка или мы что-то здесь упускаем?Мы могли бы установить команду на sleep
и аргументы на infinity
точно так же, как мы установили их в Dockerfile
с, но я бы предпочел сохранить их в их собственном образе в Dockerfile и не загрязнять конфигурацию Jenkins.
Кто-нибудь сталкивается с подобной проблемой?Пожалуйста, поделитесь.
Версия плагина Kubernetes: 1.12.4
Версия Jenkins: 2.150