用于挂载卷的 Jenkinsfile 模板

Jenkinsfile Template to mount a volume

这是我来自 Jenkinsfile 的 containerTemplate 片段,它在 Kubernetes 上创建了一个 pod 和一个名为 mvn-c1 的容器。

containerTemplate(
  name: 'mvn-c1',
  image: 'mycompany.lab/build_images/mvn_c1_k8s:0.3',
  privileged: true,
  ttyEnabled: true,
  command: 'cat',
  imagePullSecrets: ['docker-repo'],

  volumeMounts: [ name: 'maven-repo1' , mountPath: '/root/.m2' ],
  volumes: [
    nfsVolume( mountPath: '/root/.m2', serverAddress: 'nfs-server-ip', 
    serverPath: '/jenkins_data', readOnly: false ),
  ]
)

问题是卷无法装载到容器中,也没有在控制台上显示任何解析错误。

我已参考 this documentation 构建 containerTemplate

有没有人有幸尝试过这种方法?

欢迎来到 Whosebug @Vamshi

我认为您当前的管道定义有两个问题:

  1. volumes 是 podTemplate 的一部分而不是 containerTemplate

WARNING: Unknown parameter(s) found for class type 'org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate': volumes

  1. 通常你的 Kubernetes 插件会在你的 NFS 服务器所在的另一个命名空间中生成 Jenkins slave Pods,因此为 NFS 卷指定 'serverAddress' NFS 服务器的 IP 地址而不是它的 Kubernetes 更安全服务名称。

这是一个完整的示例:

podTemplate(containers: [
    containerTemplate(name: 'maven',
    image: 'maven:3.3.9-jdk-8-alpine',
    ttyEnabled: true,
    command: 'cat')
  ],
    volumes: [
    nfsVolume( mountPath: '/root/.m2', serverAddress: '10.0.174.57', 
    serverPath: '/', readOnly: false ),
    ]
  ) {

    node(POD_LABEL) {
        stage('Get a Maven project') {
            container('maven') {
                stage('Build a Maven project') {
                    sh 'while true; do date > /root/.m2/index.html; hostname >> /root/.m2/index.html; sleep $(($RANDOM % 5 + 5)); done'
                }
            }
        }

    }
}

正在验证 POD 内挂载的基于 nfs 的持久卷的正确性:

kubectl exec container-template-with-nfs-pv-10-cl42l-042tq-z3n7b -c maven -- cat /root/.m2/index.html

Output: Mon Aug 26 14:47:28 UTC 2019 nfs-busybox-9t7wx

首先感谢您对 NFS IP 与名称空间的端点关联的详细解释。对于帖子之间的长时间间隔,我深表歉意。

我有意隐藏了 podTemplate 并发布了 Jenkinsfile 片段。

通过在我的从 POD yaml 文件中提供参考,我能够以预期的结果实现此目的,该文件具有 NFS ip 和挂载点标签。

我是这样称呼它的:

      kubernetes {
      label "slavepod-${UUID.randomUUID().toString()}"
      yamlFile './k8s-pod.yaml'
    }
  }

我的 POD yaml 具有以下内容

  volumes:
    - name: maven-repo1
      nfs:
        server: NFS-IP
        path: /jenkins_data