From f721d5be1a8fbdb55db98f21c7c70ce34817d1a7 Mon Sep 17 00:00:00 2001 From: Dominik Chilla Date: Sat, 15 Jun 2019 00:00:58 +0200 Subject: [PATCH] Jenkins scripted multibranch pipeline --- Jenkinsfile | 24 +++++++++++++++++------- Jenkinsfile.declarative.multibranch | 24 +++++++++++++++++------- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4ca56de..2d70b1d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,11 +4,11 @@ pipeline { parameters { string defaultValue: 'https', name: 'dockerRegistryScheme', trim: true string defaultValue: 'example.com', name: 'dockerRegistryRepo', trim: true + string defaultValue: 'sos-milter', name: 'imageName', trim: true } environment { - dockerImage = '' - imageName = 'sos-milter' + dockerImageObj = '' } stages { @@ -16,7 +16,7 @@ pipeline { steps { sh '/usr/bin/env' script { - dockerImage = docker.build( + dockerImageObj = docker.build( "${env.imageName}:${env.BRANCH_NAME}", "--pull --label BUILD_URL=${env.BUILD_URL} ." ) @@ -26,7 +26,7 @@ pipeline { stage('Test image') { steps { script { - dockerImage.inside { + dockerImageObj.inside { sh 'echo "INSIDE CONTAINER!"' sh '/usr/bin/env' sh '/bin/ps auxwwf' @@ -38,15 +38,25 @@ pipeline { steps { script { docker.withRegistry("${env.dockerRegistryScheme}://${env.dockerRegistryRepo}") { - dockerImage.push() + dockerImageObj.push() } } } } stage('Cleanup') { steps { - sh '/usr/bin/docker rmi -f "${imageName}:${BRANCH_NAME}"' - sh '/usr/bin/docker rmi -f "${dockerRegistryRepo}/${imageName}:${BRANCH_NAME}"' + /* The default is to reuse the local images for future builds. The reason + for this is quite simple! It´s much easier to prune local images from + disk than pushed images from the (cheap) docker registry! */ + /* Uncomment the following directives if you want your build host to stay + clean from local docker images after successfull push. But, there is a + caveat if you do so! Each build job produces at least one new image layer + which gets pushed to the registry. This could blow up your registry after + a couple of time! For garbage collection check this out: + https://docs.docker.com/registry/garbage-collection/ */ + /* echo "Remove local docker images after successfull push to registry..." */ + /* sh '/usr/bin/docker rmi -f "${imageName}:${BRANCH_NAME}"' */ + /* sh '/usr/bin/docker rmi -f "${dockerRegistryRepo}/${imageName}:${BRANCH_NAME}"' */ } } } diff --git a/Jenkinsfile.declarative.multibranch b/Jenkinsfile.declarative.multibranch index 4ca56de..2d70b1d 100644 --- a/Jenkinsfile.declarative.multibranch +++ b/Jenkinsfile.declarative.multibranch @@ -4,11 +4,11 @@ pipeline { parameters { string defaultValue: 'https', name: 'dockerRegistryScheme', trim: true string defaultValue: 'example.com', name: 'dockerRegistryRepo', trim: true + string defaultValue: 'sos-milter', name: 'imageName', trim: true } environment { - dockerImage = '' - imageName = 'sos-milter' + dockerImageObj = '' } stages { @@ -16,7 +16,7 @@ pipeline { steps { sh '/usr/bin/env' script { - dockerImage = docker.build( + dockerImageObj = docker.build( "${env.imageName}:${env.BRANCH_NAME}", "--pull --label BUILD_URL=${env.BUILD_URL} ." ) @@ -26,7 +26,7 @@ pipeline { stage('Test image') { steps { script { - dockerImage.inside { + dockerImageObj.inside { sh 'echo "INSIDE CONTAINER!"' sh '/usr/bin/env' sh '/bin/ps auxwwf' @@ -38,15 +38,25 @@ pipeline { steps { script { docker.withRegistry("${env.dockerRegistryScheme}://${env.dockerRegistryRepo}") { - dockerImage.push() + dockerImageObj.push() } } } } stage('Cleanup') { steps { - sh '/usr/bin/docker rmi -f "${imageName}:${BRANCH_NAME}"' - sh '/usr/bin/docker rmi -f "${dockerRegistryRepo}/${imageName}:${BRANCH_NAME}"' + /* The default is to reuse the local images for future builds. The reason + for this is quite simple! It´s much easier to prune local images from + disk than pushed images from the (cheap) docker registry! */ + /* Uncomment the following directives if you want your build host to stay + clean from local docker images after successfull push. But, there is a + caveat if you do so! Each build job produces at least one new image layer + which gets pushed to the registry. This could blow up your registry after + a couple of time! For garbage collection check this out: + https://docs.docker.com/registry/garbage-collection/ */ + /* echo "Remove local docker images after successfull push to registry..." */ + /* sh '/usr/bin/docker rmi -f "${imageName}:${BRANCH_NAME}"' */ + /* sh '/usr/bin/docker rmi -f "${dockerRegistryRepo}/${imageName}:${BRANCH_NAME}"' */ } } }