최근에 kubernetes 에이전트로 스크립팅 된 것에서 선언적으로 전환했습니다. 2018 년 7 월까지 선언적 파이프 라인은 kubernetes pod를 지정할 수있는 완전한 기능이 없었습니다. 그러나 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