最近、kubernetesエージェントを使用したスクリプトから宣言型に切り替えました。2018年7月までは、宣言型パイプラインはkubernetesポッドを指定するための完全な機能を持っていませんでした。ただし、yamlFile
ステップを追加することで、リポジトリのyamlファイルからポッドテンプレートを読み取ることができます。
これにより、たとえば、vscodeの優れたkubernetesプラグインを使用してポッドテンプレートを検証し、それをJenkinsfileに読み込んで、コンテナを好きなように使用できます。
pipeline {
agent {
kubernetes {
label 'jenkins-pod'
yamlFile 'jenkinsPodTemplate.yml'
}
}
stages {
stage('Checkout code and parse Jenkinsfile.json') {
steps {
container('jnlp'){
script{
inputFile = readFile('Jenkinsfile.json')
config = new groovy.json.JsonSlurperClassic().parseText(inputFile)
containerTag = env.BRANCH_NAME + '-' + env.GIT_COMMIT.substring(0, 7)
println "pipeline config ==> ${config}"
} // script
} // container('jnlp')
} // steps
} // stage
上記のように、スクリプトブロックを追加できます。カスタムjnlpとdockerを使用したポッドテンプレートの例。
apiVersion: v1
kind: Pod
metadata:
name: jenkins-pod
spec:
containers:
- name: jnlp
image: jenkins/jnlp-slave:3.23-1
imagePullPolicy: IfNotPresent
tty: true
- name: rsync
image: mrsixw/concourse-rsync-resource
imagePullPolicy: IfNotPresent
tty: true
volumeMounts:
- name: nfs
mountPath: /dags
- name: docker
image: docker:17.03
imagePullPolicy: IfNotPresent
command:
- cat
tty: true
volumeMounts:
- name: docker
mountPath: /var/run/docker.sock
volumes:
- name: docker
hostPath:
path: /var/run/docker.sock
- name: nfs
nfs:
server: 10.154.0.3
path: /airflow/dags