mirror of
https://github.com/nubenetes/awesome-kubernetes.git
synced 2026-02-14 09:59:51 +00:00
confluence6-docker-build.Jenkinsfile: Declarative Jenkinsfile for building and uploading the image to Openshift-DEV, Dockerhub and Openshift-PROD (Stages are disabled via Conditional Build Steps). Tip: A Docker Plugin for Jenkins can easily replace this Jenkinsfile.
336 lines
16 KiB
Groovy
336 lines
16 KiB
Groovy
#!/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://<host_addr>'
|
|
openshift_project = '<openshift-namespace>'
|
|
openshift_credential = 'openshift-mp-dev'
|
|
registry_url = 'https://docker-registry.<host_addr>:443'
|
|
registry_host = 'docker-registry.<host_addr>:443'
|
|
registry_credential = '<openshift-credential>'
|
|
openshift_prod_url = 'https://<host_addr>'
|
|
openshift_prod_project = '<openshift-namespace>'
|
|
openshift_prod_credential = 'openshift-mp-dev'
|
|
registry_prod_url = 'https://docker-registry.<host_addr>:443'
|
|
registry_prod_host = 'docker-registry.<host_addr>: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 <openshift-namespace>') {
|
|
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}
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|