плагин kubernetes jenkins не создает 2 контейнера - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть 2 экземпляра Jenkins, одна версия 1.8 и вторая версия 1.18.

Самая старая версия может создавать оба контейнера.

Agent specification [Kubernetes Pod Template] (mo-aio-build-supplier): 
* [jnlp] mynexus.services.com/mo-base/jenkins-slave-mo-aio:1.8.2-ca(resourceRequestCpu: 0.25, resourceRequestMemory: 256Mi, resourceLimitCpu: 1, resourceLimitMemory: 1.5Gi)
* [postgres] mynexus.services.com:443/mo-base/mo-base-postgresql-95-openshift

Новейшая версия не может создать postgres контейнер

Container postgres exited with error 1. Logs: mkdir: cannot create directory '/home/jenkins': Permission denied

Оба используют одинаковые podTemplate

 podTemplate(
            name: label,
            label: label,
            cloud: 'openshift',
            serviceAccount: 'jenkins',
            containers: [
                    containerTemplate(
                            name: 'jnlp',
                            image: 'mynexus.services.theosmo.com/jenkins-slave-mo-aio:v3.11.104-14_jdk8',
                            resourceRequestCpu: env.CPU_REQUEST,
                            resourceLimitCpu: env.CPU_LIMIT,
                            resourceRequestMemory: env.RAM_REQUEST,
                            resourceLimitMemory: env.RAM_LIMIT,
                            workingDir: '/tmp',
                            args: '${computer.jnlpmac} ${computer.name}',
                            command: ''
                    ),
                    containerTemplate(
                            name: 'postgres',
                            image: 'mynexus.services.theosmo.com:443/mo-base/mo-base-postgresql-95-openshift',
                            envVars: [
                                envVar(key: "POSTGRESQL_USER", value: "admin"),
                                envVar(key: "POSTGRESQL_PASSWORD", value: "admin"),
                                envVar(key: "POSTGRESQL_DATABASE", value: "supplier_data"),
                            ]
                    )
            ],
            volumes: [emptyDirVolume(mountPath: '/dev/shm', memory: true)]
    )

Кроме того, я заметил, что YAML, созданный в последней версии, немного странный

apiVersion: "v1"
kind: "Pod"
metadata:
  annotations:
    buildUrl: "http://jenkins.svc:80/job/build-supplier/473/"
  labels:
    jenkins: "slave"
    jenkins/mo-aio-build-supplier: "true"
  name: "mo-aio-build-supplier-xfgmn-qmrdl"
spec:
  containers:
  - args:
    - "********"
    - "mo-aio-build-supplier-xfgmn-qmrdl"
    env:
    - name: "JENKINS_SECRET"
      value: "********"
    - name: "JENKINS_TUNNEL"
      value: "jenkins-jnlp.svc:50000"
    - name: "JENKINS_AGENT_NAME"
      value: "mo-aio-build-supplier-xfgmn-qmrdl"
    - name: "JENKINS_NAME"
      value: "mo-aio-build-supplier-xfgmn-qmrdl"
    - name: "JENKINS_AGENT_WORKDIR"
      value: "/tmp"
    - name: "JENKINS_URL"
      value: "http://jenkins.svc:80/"
    - name: "HOME"
      value: "/home/jenkins"
    image: "mynexus.services.com/mo-base/jenkins-slave-mo-aio:1.8.2-ca"
    imagePullPolicy: "IfNotPresent"
    name: "jnlp"
    resources:
      limits:
        memory: "1.5Gi"
        cpu: "1"
      requests:
        memory: "256Mi"
        cpu: "0.25"
    securityContext:
      privileged: false
    tty: false
    volumeMounts:
    - mountPath: "/dev/shm"
      name: "volume-0"
      readOnly: false
    - mountPath: "/tmp"
      name: "workspace-volume"
      readOnly: false
    workingDir: "/tmp"
  - env:
    - name: "POSTGRESQL_DATABASE"
      value: "supplier_data"
    - name: "POSTGRESQL_USER"
      value: "admin"
    - name: "HOME"
      value: "/home/jenkins"
    - name: "POSTGRESQL_PASSWORD"
      value: "admin"
    image: "mynexus.services.com:443/mo-base/mo-base-postgresql-95-openshift"
    imagePullPolicy: "IfNotPresent"
    name: "postgres"
    resources:
      limits: {}
      requests: {}
    securityContext:
      privileged: false
    tty: false
    volumeMounts:
    - mountPath: "/dev/shm"
      name: "volume-0"
      readOnly: false
    - mountPath: "/home/jenkins/agent"
      name: "workspace-volume"
      readOnly: false
    workingDir: "/home/jenkins/agent"
  nodeSelector: {}
  restartPolicy: "Never"
  serviceAccount: "jenkins"
  volumes:
  - emptyDir:
      medium: "Memory"
    name: "volume-0"
  - emptyDir: {}
    name: "workspace-volume"

Как вы можете видеть выше:

  • postgres контейнер находится под env дерево

Есть предложения? Заранее спасибо

1 Ответ

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

Насколько я проверил там

Проблема

Начиная с версии плагина Kubernetes 1.18.0, рабочий каталог контейнеров pod по умолчанию был изменен из / дома / Дженкинс в / домой / Дженкинс / агент. Но применение переменной среды HOME по умолчанию все еще указывает на / home / jenkins. Влияние этого изменения состоит в том, что если образы контейнера pod не имеют каталога / home / jenkins с достаточными разрешениями для работающего пользователя, сборки не смогут выполнить какие-либо действия непосредственно в своем каталоге HOME, /home/jenkins.

Разрешение

Существуют различные способы решения этой проблемы:

Изменить переменную HOME по умолчанию

Самый простой и предпочтительный способ решения этой проблемы - добавить системное свойство -Dorg.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder.defaultHome = / home / jenkins / agent при запуске Jenkins. Для этого требуется перезагрузка.

Этот обходной путь будет отражать поведение плагина kubernetes до версии 1.18.0, но в новом рабочем каталоге / home / jenkins / agent

Использовать / home / jenkins в качестве рабочего каталога

Временное решение: изменить рабочий каталог контейнеров pod обратно на / home / jenkins. Этот обходной путь возможен только при использовании YAML для определения шаблонов модуля агента ( см. JENKINS-60977 ).

Подготовка изображений для Jenkins

Обходной путь Можно было бы убедиться, что образы, используемые в модулях агентов, имеют каталог / home / jenkins, который принадлежит группе root и доступен для записи группе root, как указано в рекомендациях OpenShift Container Platform c.


Дополнительно есть проблема на Дженкинсе.


Надеюсь, это поможет.

...