Hice el cambio a declarativo recientemente desde un script con el agente de kubernetes. Hasta julio de 2018, las canalizaciones declarativas no tenían la capacidad total de especificar pods de kubernetes. Sin embargo, con la adición del yamlFile
paso, ahora puede leer su plantilla de pod desde un archivo yaml en su repositorio.
Esto le permite usar, por ejemplo, el excelente complemento kubernetes de vscode para validar su plantilla de pod, luego leerlo en su archivo Jenkins y usar los contenedores en los pasos que desee.
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
Como se mencionó anteriormente, puede agregar bloques de script. Ejemplo de plantilla de pod con jnlp personalizado y ventana acoplable.
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