Skip to content

Instantly share code, notes, and snippets.

@jforge
Forked from abdennour/00-infra.yaml
Created August 31, 2022 12:22
Show Gist options
  • Select an option

  • Save jforge/5196611bb89e48b0957a8018e323f058 to your computer and use it in GitHub Desktop.

Select an option

Save jforge/5196611bb89e48b0957a8018e323f058 to your computer and use it in GitHub Desktop.
Jenkins declarative Pipeline in Kubernetes with Parallel and Sequential steps
apiVersion: v1
kind: Pod
spec:
# dnsConfig:
# options:
# - name: ndots
# value: "1"
containers:
- name: dind
image: abdennour/docker:19-dind-bash
command:
- cat
tty: true
volumeMounts:
- name: dockersock
readOnly: true
mountPath: /var/run/docker.sock
resources:
limits:
cpu: 1000m
memory: 768Mi
volumes:
- name: dockersock
hostPath:
path: /var/run/docker.sock
// Sequential
pipeline {
agent {
kubernetes {
defaultContainer 'jnlp'
yamlFile '00-infra.yaml'
}
}
stages {
stage('Build') {
steps {
container('dind') {
sh 'docker build --network=host portal/ -t portal:dev'
sh 'docker build --network=host iam/ -t iam:dev'
sh 'docker push portal:dev'
sh 'docker push iam:dev'
}
containerLog 'dind'
}
}
}
}
pipeline {
agent any
stages {
stage('Build') {
parallel {
// stage 1-a
stage('build-portal') {
agent {
kubernetes {
defaultContainer 'jnlp'
yamlFile '00-infra.yaml'
}
}
steps {
container('dind') {
sh 'docker build --network=host portal/ -t portal:dev'
sh 'docker push portal:dev'
}
}
}
// stage 1-b
stage('build-iam') {
agent {
kubernetes {
defaultContainer 'jnlp'
yamlFile '00-infra.yaml'
}
}
steps {
container('dind') {
sh 'docker build --network=host iam/ -t iam:dev'
sh 'docker push iam:dev'
}
}
}
}
}
}
}
def services = ['portal', 'iam']
def parallelBuildStagesMap = services.collectEntries {
["${it}" : generateBuildStage(it)]
}
def generateBuildStage(service) {
return {
stage("build-${service}") {
agent {
kubernetes {
defaultContainer 'jnlp'
yamlFile '00-infra.yaml'
}
}
steps {
container('dind') {
sh 'docker build -t ${service}:dev'
sh 'docker push ${service}:dev'
}
}
}
}
}
pipeline {
agent any
stages {
stage('Build') {
steps {
script { // <-- script must be used to integrate imperative pipeline into Declarative
parallel parallelBuildStagesMap
}
}
} // end of main stage Build
} // end of stages
} // end of pipeline
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment