configure cloudsの設定でpodTemplateを定義ずみで、 inheritFrom
で継承しつつ一部だけを上書きしたいときの書き方
podTemplateの設定
- name
my-jenkins-agent
- labels
my-jenkins-agent
pipeline {
agent {
kubernetes {
inheritFrom 'my-jenkins-agent'
label 'my-jenkins-agent'
yamlMergeStrategy merge()
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
some-label: some-label-value
spec:
containers:
- name: maven
image: maven:alpine
command:
- cat
tty: true
'''
}
}
stages {
stage('Run maven') {
steps {
container('maven') {
sh 'mvn -version'
}
}
}
}
}
こうすると、設定済みのpodTemplateが使われて yaml
に書いた定義は反映されない。
labelが完全一致していると上書きできないのかも?
kubernetes {
inheritFrom 'my-jenkins-agent'
// label 'my-jenkins-agent'
yamlMergeStrategy merge()
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
some-label: some-label-value
spec:
containers:
- name: maven
image: maven:alpine
command:
- cat
tty: true
'''
}
label
を削除すると yaml
の定義が反映されるが、pod名が my-jenkins-agent-<random string>
とはならず、ジョブ名がprefixについたpodが作成される
kubernetes {
inheritFrom 'my-jenkins-agent'
label 'my-jenkins-agent-custom'
yamlMergeStrategy merge()
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
some-label: some-label-value
spec:
containers:
- name: maven
image: maven:alpine
command:
- cat
tty: true
'''
}
このように label
に podTemplate とは異なる値をつけることで、 my-jenkins-agent-custom-<random string>
というpodで作成された。
custom というのが入ってしまうのは気になるが仕方ない
podTemplateのlabelsの設定を消すことで、 label 'my-jenkins-agent'
としてもpod名が意図通りになりつつ上書きできたので、これでもいい。