diff --git a/scripts/confluence6-docker-build.Jenkinsfile b/scripts/confluence6-docker-build.Jenkinsfile new file mode 100644 index 00000000..48793c06 --- /dev/null +++ b/scripts/confluence6-docker-build.Jenkinsfile @@ -0,0 +1,335 @@ +#!/usr/bin/env groovy +// Description: pipeline script that builds docker images defined with dockerfiles +// A Declarative Pipeline is defined within a 'pipeline' block. +pipeline { + agent { + node { label 'docker' } + } + environment { + image_name = 'confluence6' + openshift_url = 'https://' + openshift_project = '' + openshift_credential = 'openshift-mp-dev' + registry_url = 'https://docker-registry.:443' + registry_host = 'docker-registry.:443' + registry_credential = '' + openshift_prod_url = 'https://' + openshift_prod_project = '' + openshift_prod_credential = 'openshift-mp-dev' + registry_prod_url = 'https://docker-registry.:443' + registry_prod_host = 'docker-registry.:443' + registry_prod_credential = 'openshift-mp-dev' + //registry_host_dockerhub = 'registry.hub.docker.com' + dockerhub_credential = 'dockerhub-credential' + HTTP_PROXY = 'http://user:password@proxy.domain.net:80' + HTTPS_PROXY = 'http://user:password@proxy.domain.net:80' + NO_PROXY = 'localhost,127.0.0.1,.domain.net' + } + parameters { + choice( + // choices are a string of newline separated values + // https://issues.jenkins-ci.org/browse/JENKINS-41180 + choices: 'Openshift-DEV\nDockerhub\nOpenshift-PROD\nOpenshift-DEV-PROD\nALL', + description: 'Choose between pushing the image to Openshift-DEV, Dockerhub or Openshift-PROD', + name: 'REQUESTED_ACTION') + } + stages { + stage('Start') { + steps { + sh 'date' + } + } + stage('Clone Repository') { + /* Let's make sure we have the repository cloned to our workspace */ + steps { + checkout scm + dir('confluence6_atlassian') { + git credentialsId: 'Bitbucket_Access', url: "ssh://git@git.domain:port/~user/confluence6_atlassian.git" + } + } + } + stage ('Checking docker environment') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + hostname + whoami + id + systemctl show --property=Environment docker # (/etc/systemd/system/docker.service.d/http-proxy.conf) + cat /etc/sysconfig/docker + #sudo cat /etc/docker/daemon.json # disabled (password requested) + systemctl status docker + #sudo systemctl reload docker # disabled (password requested) + #sudo systemctl restart docker # disabled (password requested) + ''' + } + } + } +/* stage ('Restart docker') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + #sudo systemctl daemon-reload + #sudo systemctl restart docker + ''' + } + } + }*/ + stage ('List local docker containers and images') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + docker ps -a + docker images + ''' + } + } + } + stage ('oc login Openshift-DEV - oc project ') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + oc login ${openshift_url} --username=${oc_user} --password=${oc_pw} + oc project ${openshift_project} + ''' + } + } + } + stage ('Dockerhub login') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + # Dockerhub public registry login (https://hub.docker.com): + docker login -u ${dockerhub_user} -p ${dockerhub_pw} + ''' + } + } + } + stage ('docker build (Dockerhub base image is pulled)') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + #docker build --add-host dl-cdn.alpinelinux.org:151.101.204.249 --add-host mirror1.hs-esslingen.de:129.143.116.10 -t ${openshift_project}/${image_name}:latest . + docker build -t ${openshift_project}/${image_name}:latest . + ''' + } + } + } + stage ('docker images') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + docker images + ''' + } + } + } + /* + stage ('Openshift-DEV Docker Registry Login Push Logout') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + ##################################################################################### + # Openshift Docker Registry: + #docker login -u \$(oc whoami) -p \$(oc whoami -t) ${registry_url} + #docker tag ${openshift_project}/${image_name} ${registry_host}/${openshift_project}/${image_name} + #docker push ${registry_host}/${openshift_project}/${image_name} + #docker images ${registry_url} + #docker logout ${registry_url} + ##################################################################################### + ''' + } + } + }*/ + stage ('oc logout') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + oc logout + ''' + } + } + } + stage ('Docker push to dockerhub private repo') { + when { + // Only push to Dockerhub when it is requested + expression { params.REQUESTED_ACTION == 'Dockerhub' || params.REQUESTED_ACTION == 'ALL' } + } + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + docker tag ${openshift_project}/${image_name} ${dockerhub_user}/${image_name} + docker push ${dockerhub_user}/${image_name} + ''' + } + } + } + stage ('Dockerhub public registry logout') { + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + docker logout # dockerhub public registry logout + ''' + } + } + } + /*stage('Decide docker push to Openshift-DEV') { + agent none + steps { + script { + input 'Do you want to push the image to Openshift-Dev?' + } + } + }*/ + stage('oc login + docker push to Openshift-DEV (dockerhub base image already pulled) + oc logout') { + when { + // Only push to Openshift-DEV when it is requested + expression { params.REQUESTED_ACTION == 'Openshift-DEV' || params.REQUESTED_ACTION == 'Openshift-DEV-PROD' || params.REQUESTED_ACTION == 'ALL' } + } + steps { + script { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user')]) { + docker.withRegistry("${registry_url}", "${registry_credential}") { + //credentials-id defined in main jenkins for openshift test docker registry: openshift-mp-dev + sh "whoami" + sh "docker images" + + sh "oc login ${openshift_url} --username=${oc_user} --password=${oc_pw}" + sh "docker login -u \$(oc whoami) -p \$(oc whoami -t) ${registry_url}" + + // 1st option. We don't build the image, instead we just push the already built image: + def image = docker.image('${openshift_project}/${image_name}') + image.push("latest") + + // 2nd option (without declarative pipeline): + //sh "docker tag ${openshift_project}/${image_name} ${registry_host}/${openshift_project}/${image_name}" + //sh "docker push ${registry_host}/${openshift_project}/${image_name}" + + // 3rd option: We rebuild the image and push it afterwards: + /* Push the container to the custom Registry with declarative docker pipeline */ + //docker.build("${openshift_project}/${image_name}:${env.BUILD_ID}").push('latest') + } + } + } + } + } + stage ('Verify that the image stream was created in Openshift-DEV') { + when { + // Only push to Openshift-DEV when it is requested + expression { params.REQUESTED_ACTION == 'Openshift-DEV' || params.REQUESTED_ACTION == 'Openshift-DEV-PROD' || params.REQUESTED_ACTION == 'ALL' } + } + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + #Verify that the image stream was created: + oc get is -n ${openshift_project} + ''' + } + } + } + stage ('docker logout Openshift-DEV') { + when { + // Only push to Openshift-DEV when it is requested + expression { params.REQUESTED_ACTION == 'Openshift-DEV' || params.REQUESTED_ACTION == 'Openshift-DEV-PROD' || params.REQUESTED_ACTION == 'ALL' } + } + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + oc logout + docker logout ${registry_url} + ''' + } + } + } + stage('oc login + docker push to Openshift-PROD (dockerhub base image already pulled) + oc logout') { + when { + // Only push to Openshift-DEV when it is requested + expression { params.REQUESTED_ACTION == 'Openshift-PROD' || params.REQUESTED_ACTION == 'Openshift-DEV-PROD' || params.REQUESTED_ACTION == 'ALL' } + } + steps { + script { + withCredentials([usernamePassword(credentialsId: "${openshift_prod_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user')]) { + docker.withRegistry("${registry_prod_url}", "${registry_prod_credential}") { + //credentials-id defined in main jenkins for openshift test docker registry: openshift-mp-dev + sh "whoami" + sh "docker images" + + sh "oc login ${openshift_prod_url} --username=${oc_user} --password=${oc_pw}" + sh "docker login -u \$(oc whoami) -p \$(oc whoami -t) ${registry_prod_url}" + + // 1st option. We don't build the image, instead we just push the already built image: + def image = docker.image('${openshift_prod_project}/${image_name}') + image.push("latest") + + // 2nd option (without declarative pipeline): + //sh "docker tag ${openshift_project}/${image_name} ${registry_prod_host}/${openshift_project}/${image_name}" + //sh "docker push ${registry_prod_host}/${openshift_project}/${image_name}" + + // 3rd option: We rebuild the image and push it afterwards: + /* Push the container to the custom Registry with declarative docker pipeline */ + //docker.build("${openshift_project}/${image_name}:${env.BUILD_ID}").push('latest') + } + } + } + } + } + stage ('Verify that the image stream was created in Openshift-PROD') { + when { + // Only push to Openshift-DEV when it is requested + expression { params.REQUESTED_ACTION == 'Openshift-PROD' || params.REQUESTED_ACTION == 'Openshift-DEV-PROD' || params.REQUESTED_ACTION == 'ALL' } + } + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_prod_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + #Verify that the image stream was created: + oc get is -n ${openshift_prod_project} + ''' + } + } + } + stage ('docker logout Openshift-PROD') { + when { + // Only push to Openshift-DEV when it is requested + expression { params.REQUESTED_ACTION == 'Openshift-PROD' || params.REQUESTED_ACTION == 'Openshift-DEV-PROD' || params.REQUESTED_ACTION == 'ALL' } + } + steps { + withCredentials([usernamePassword(credentialsId: "${openshift_prod_credential}", passwordVariable: 'oc_pw', usernameVariable: 'oc_user'), + usernamePassword(credentialsId: "${dockerhub_credential}", passwordVariable: 'dockerhub_pw', usernameVariable: 'dockerhub_user')]) { + sh ''' + #!/bin/bash + oc logout + docker logout ${registry_prod_url} + ''' + } + } + } + } +}