【问题标题】:Can't override jnlp podTemplate & container - Jenkins declarative pipeline无法覆盖 jnlp podTemplate 和容器 - Jenkins 声明式管道
【发布时间】:2021-07-03 19:52:36
【问题描述】:

我在 kubernetes 集群上使用 jenkins,安装 helm chart 如下,

helm install my-jenkins jenkinsci/jenkins -n jenkins \
--set controller.serviceType=LoadBalancer \
--set controller.servicePort=8888 \
--set persistence.existingClaim=jenkins-pvc \
--set persistence.accessMode=ReadWriteMany

也尝试过 --set agent.enabled=false 但也获取了默认的 jnlp 图像

并试图通过下面的管道覆盖 jnlp 代理,但它跳过了我的定义并提取了默认的 jenkins/inbound-agent:4.3-4 图像。

我的管道:

pipeline {
  
    agent {
        kubernetes {
            cloud 'kubernetes'
            label 'jnlp'
            defaultContainer 'jnlp'
            yaml """
                apiVersion: v1
                kind: Pod
                metadata:
                labels:
                    label: agent
                    jenkins: slave
                name: jnlp
                spec:
                containers:
                - name: jnlp
                  image: nurhun/my_custom_jenkins_inboud_agent:v1.0
                  args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
                  env:
                  - name: CONTAINER_ENV_VAR
                    value: jnlp
                  - name: JENKINS_AGENT_WORKDIR
                    value: /home/jenkins/agent
                  - name: JENKINS_URL
                    value: http://my-jenkins.jenkins.svc.cluster.local:8888/
                  - name: "JENKINS_TUNNEL"
                    value: "my-jenkins-agent.jenkins.svc.cluster.local:50000"
                  volumeMounts:
                  - mountPath: "/home/jenkins/agent"
                    name: "workspace-volume"
                    readOnly: false
                  - name: jenkins-docker-cfg
                    mountPath: /var/run/docker.sock
                volumes:
                - name: jenkins-docker-cfg
                  hostPath:
                    path: /var/run/docker.sock
                - emptyDir:
                    medium: ""
                    name: "workspace-volume"
            """
        }
    }

      
    stages {

        stage('Build') {
            agent {
                kubernetes {
                    label 'jnlp'
                    defaultContainer 'jnlp'
                }
            }

            steps {
                sh "docker build . -t custom_image:${IMAGE_TAG}"
            }
        }
     }
}

我也尝试如下设置Defaults Provider Template Name,但还是不行。

有什么想法吗?

【问题讨论】:

    标签: jenkins jenkins-pipeline kubernetes-pod jnlp declarative


    【解决方案1】:

    我会尝试像这样指定您要使用的容器:

    stages {
        stage('Build') {
            steps {
                container('jnlp'){
                    sh "docker build . -t custom_image:${IMAGE_TAG}"
                }
            }
        }
    }
    

    See more

    【讨论】:

    • 不起作用,因为启动的 pod 本身使用默认的 jnlp 运行,所以没关系
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2018-03-17
    • 2017-12-03
    • 1970-01-01
    • 2021-12-07
    • 2017-08-12
    • 2021-01-15
    相关资源
    最近更新 更多