无法覆盖 jnlp podTemplate 和容器 - Jenkins 声明性管道

问题描述

我在 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 设置如下,但仍然不起作用。

Defaults Provider Template Name

有什么想法吗?

解决方法

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

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

GroupBy.last()