我正在尝试通过使用kubernetes-plugin将我的工作区保留在PersistentVolumeClaim
我已经创建了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 "
}
}
}
}
}
}
现在,詹金斯总是像这样装载卷:
volumeMounts:
- mountPath: "/home/jenkins/agent"
name: "workspace-volume"
readOnly: false
volumes:
- emptyDir:
medium: ""
name: "workspace-volume"
我的问题是:如何用我的emptyDir
覆盖persistentVolumeClaim
的默认值作为我的工作空间量?
答案 0 :(得分:1)
为了帮助像我一样后来遇到这个问题的任何人,kubernetes
部分中的 agent
有一个属性,它定义了如何处理工作区体积。 Jenkins 将使用工作区的挂载和卷扩展您的代理 YAML 文件包含的任何内容。
因此要使用现有的持久卷声明,您可以:
pipeline {
agent {
kubernetes {
yaml podTemplate
workspaceVolume persistentVolumeClaimWorkspaceVolume(claimName: 'jenkins-slave-pvc', readOnly: false)
}
}
...
}
根据您的持久卷的设置方式以及您支持的并行构建类型,您可能希望改为使用动态持久卷声明,以便每个构建代理获得自己的工作区卷。您可以通过以下方式配置该功能:
pipeline {
agent {
kubernetes {
yaml podTemplate
workspaceVolume dynamicPVC(accessModes: 'ReadWriteOnce', requestsSize: "10Gi")
}
}
...
}