jenkins Slave 的 PersistentVolumeClaim 工作区

air*_*ata 6 jenkins kubernetes jenkins-pipeline jenkins-declarative-pipeline jenkins-kubernetes

PersistentVolumeClaim我正在尝试使用kubernetes-plugin来保留我的工作区

我已经创建了文件PV并将PVC其存储在本地磁盘上。该管道以前运行良好,但现在不再在本地磁盘上创建工作区。

这是我的管道。知道为什么不起作用吗?

def podTemplate = """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: maven
    image: maven
    command:
    - sleep
    args:
    - infinity
    volumeMounts:
      - name: workspace-volume
        mountPath: /home/jenkins/agent
    workingDir: "/home/jenkins/agent"
  volumes:
      - name: "workspace-volume"
        persistentVolumeClaim:
          claimName: "jenkins-slave-pvc"
          readOnly: false
"""


pipeline {
    agent none
    stages {
        stage ('maven') {
            agent { 
                kubernetes {
                    yaml podTemplate 
                    defaultContainer 'maven' 
                } 
            }
            stages {
                stage('Nested 1') {                  
                    steps {
                        sh "touch Nested1 && mvn -version"
                    }
                }
                stage('Nested 2') {                  
                    steps {
                        sh "mvn -version 2 && touch Nested2 "
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在 Jenkins 总是这样挂载卷:

volumeMounts:
 - mountPath: "/home/jenkins/agent"
   name: "workspace-volume"
   readOnly: false
volumes:
  - emptyDir:
      medium: ""
    name: "workspace-volume"
Run Code Online (Sandbox Code Playgroud)

我的问题是:emptyDir如何用 my覆盖默认值persistentVolumeClaim作为我的工作区卷?

小智 5

为了帮助像我一样后来遇到这个问题的人,kubernetes该agent部分中有一个属性,它定义了如何处理工作区体积。Jenkins 将通过工作区的挂载和卷来扩展代理 YAML 文件包含的任何内容。

因此,要使用现有的持久卷声明,您可以执行以下操作:

pipeline {
    agent {
        kubernetes {
            yaml podTemplate
            workspaceVolume persistentVolumeClaimWorkspaceVolume(claimName: 'jenkins-slave-pvc', readOnly: false)
        }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

根据持久卷的设置方式以及您支持的并行构建类型,您可能希望使用动态持久卷声明,以便每个构建代理获得自己的工作区卷。您可以通过以下方式配置该功能:

pipeline {
    agent {
        kubernetes {
            yaml podTemplate
            workspaceVolume dynamicPVC(accessModes: 'ReadWriteOnce', requestsSize: "10Gi")
        }
    }
...
}
Run Code Online (Sandbox Code Playgroud)