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

问题描述 投票:0回答:2

我在 kubernetes 集群上使用 jenkins,安装了 helm 图表,如下所示,

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
2个回答
0
投票

我会尝试指定您要使用的容器,如下所示:

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

查看更多


0
投票

我自己偶然发现了这一点。我尝试通过“Pod 模板”设置覆盖默认的 jenkins 代理 docker 映像,但它无法正常工作。然后我在容器名称部分下看到了这个信息位: Pod template container name info

因此,如果您希望该容器覆盖 jenkins-agent 镜像的默认拉取,请确保容器名称为“jnlp”

© www.soinside.com 2019 - 2024. All rights reserved.