用于挂载卷的 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
我认为您当前的管道定义有两个问题:
volumes
是 podTemplate 的一部分而不是 containerTemplate
WARNING: Unknown parameter(s) found for class type
'org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate': volumes
- 通常你的 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
这是我来自 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
我认为您当前的管道定义有两个问题:
volumes
是 podTemplate 的一部分而不是 containerTemplate
WARNING: Unknown parameter(s) found for class type 'org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate': volumes
- 通常你的 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