繁体   English   中英

kubernetes jenkins 插件不创建 2 个容器

[英]kubernetes jenkins plugin does not create 2 containers

我有 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

有什么建议吗? 提前致谢

据我在那里检查

问题

自 Kubernetes 插件版本 1.18.0 起,pod 容器的默认工作目录由 /home/jenkins 更改为 /home/jenkins/agent。 但是默认的 HOME 环境变量执行仍然指向 /home/jenkins。 此更改的影响是,如果 pod 容器映像没有 /home/jenkins 目录,该目录对运行用户具有足够的权限,则构建将无法直接在其 HOME 目录 /home/jenkins 下执行任何操作。

解析度

该问题有不同的解决方法:

更改默认的 HOME 变量

最简单和首选的解决方法是在 Z2E54334C0A5CE2E3E5A584Zstartup 上添加系统属性 -Dorg.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder.defaultHome=/home/jenkins/agent 这需要重新启动。

此解决方法将反映 kubernetes 插件 pre-1.18.0 但在新工作目录 /home/jenkins/agent 上的行为

使用 /home/jenkins 作为工作目录

一种解决方法是将 pod 容器的工作目录更改回 /home/jenkins。 此解决方法仅在使用 YAML 定义代理 pod 模板时可行(请参阅 JENKINS-60977 )。

为 Jenkins 准备图像

一种解决方法是确保代理 pod 中使用的映像具有 /home/jenkins 目录,该目录归根组所有,并且可由根组写入,如 OpenShift Container Platform 特定指南中所述。


另外还有 jenkins 上的问题


希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM