Jenkins Kubernetes插件:声明性管道和POD模板继承

omjgkv6w  于 2022-11-02  发布在  Jenkins
关注(0)|答案(1)|浏览(252)

Jenkins Kubernetes插件的文档说明:
与脚本化的k8s模板不同,声明性模板不会从父模板继承。如果需要,您需要显式声明继承。插件自述文件
不幸的是,没有一个例子说明如何显式地声明从构建的主模板继承。我试着使用标签,但是继承似乎被忽略了。

def parentLabel = "my-project-${UUID.randomUUID().toString()}"

pipeline {
    agent {
        kubernetes {
            label parentLabel
            yamlFile "jenkins-agent.yml"
            // a global template in the cloud configuration
            inheritFrom "docker"
        }
    }
    stages {
        // .. stages using the above agent
        stage( 'Test Container' ) {
            agent {
                kubernetes {
                    label "xcel-spring-stage-${UUID.randomUUID().toString()}"
                    inheritFrom parentLabel
                    yaml """
                    apiVersion: v1
                    kind: Pod
                    metadata:
                      namespace: build
                      labels:
                        project: x-celerate-spring-application
                    spec:
                      containers:
                        - name: spring-application
                          # defined in previous stages, skipped for brevity
                          image: ${env.IMAGE_NAME}:${version}.${env.BUILD_NUMBER}
                    """
                }
            }
        }
    }
}

如何/通过什么样的模板名称来引用在stage代理声明的inheritFrom语句中管道顶部声明的模板,以实际显式定义继承?

v09wglhw

v09wglhw1#

有关默认继承的文档已更新,现在声明:
如有必要,您需要使用字段inheritFrom显式声明继承。
文档中有两个示例:

podTemplate(inheritFrom: 'mypod', containers: [
    containerTemplate(name: 'maven', image: 'maven:3.8.1-jdk-11')
  ]) {
  node(POD_LABEL) {
    …
  }
}

或者在声明性流水线中:

pipeline {
  agent {
    kubernetes {
      inheritFrom 'mypod'
      yaml '''
      spec:
        containers:
        - name: maven
          image: maven:3.8.1-jdk-11
'''
      …
    }
  }
  stages {
    …
  }
}

相关问题