diff --git a/Jenkinsfile b/Jenkinsfile index 0a5f73bb61823ed177c3685b8dbd252a54d8f864..6a890ee55f9b4da42250a4f8d52df5f4b5754fbb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -97,7 +97,7 @@ pipeline { steps { script { FAILED_STAGE=env.STAGE_NAME - IMAGE_TAG = "${env.BRANCH_NAME}-${VERSION}" + IMAGE_TAG = generateImageTag() container("maven-17"){ configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { @@ -162,7 +162,7 @@ pipeline { } } } - stage('Deploy Goofy') { + stage('Tag and Push Docker Image') { when { anyOf { branch 'master' @@ -173,49 +173,29 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - } - container("docker") { - script { - withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { - sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' - - if (env.BRANCH_NAME == 'release') { - sh "docker tag docker.ozg-sh.de/goofy:${IMAGE_TAG} docker.ozg-sh.de/goofy:latest" - sh 'docker push docker.ozg-sh.de/goofy:latest' - } - - if (env.BRANCH_NAME == 'master') { - sh "docker tag docker.ozg-sh.de/goofy:${IMAGE_TAG} docker.ozg-sh.de/goofy:snapshot-latest" - sh 'docker push docker.ozg-sh.de/goofy:snapshot-latest' - } - } + + if (env.BRANCH_NAME == 'master') { + tagAndPushDockerImage('snapshot-latest') + } + else if (env.BRANCH_NAME == 'release') { + tagAndPushDockerImage('latest') } } } } - stage('Rollout (kiel-dev & ea-dev) | (kiel-test $ sl-test) Goofy') { + stage('Trigger Dev rollout') { when { - anyOf { - branch 'master' - branch 'release' - } + branch 'master' } - steps { script { FAILED_STAGE = env.STAGE_NAME - } - container("k8s"){ - script { - if (env.BRANCH_NAME == 'master') { - sh 'kubectl rollout restart deployment/goofy -n sh-kiel-dev' - sh 'kubectl rollout status deployment/goofy -n sh-kiel-dev' + checkoutProvisioningRepo() - sh 'kubectl rollout restart deployment/goofy -n sh-ea-dev' - sh 'kubectl rollout status deployment/goofy -n sh-ea-dev' - } - } + setNewGoofyProvisioningVersion('dev') + + pushNewProvisioningVersion('dev') } } } @@ -287,6 +267,24 @@ pipeline { } } } + stage('Trigger Test | Stage rollout') { + when { + branch 'release' + } + + steps { + script { + FAILED_STAGE = env.STAGE_NAME + + checkoutProvisioningRepo() + + setNewGoofyProvisioningVersion('test') + setNewGoofyProvisioningVersion('stage') + + pushNewProvisioningVersion('test stage') + } + } + } } post { failure { @@ -299,6 +297,27 @@ pipeline { } } +Void tagAndPushDockerImage(String newTag){ + container("docker") { + withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { + sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' + + sh "docker tag docker.ozg-sh.de/goofy:${IMAGE_TAG} docker.ozg-sh.de/goofy:${newTag}" + sh "docker push docker.ozg-sh.de/goofy:${newTag}" + } + } +} + +String generateImageTag() { + def imageTag = "${env.BRANCH_NAME}-${VERSION}" + + if (env.BRANCH_NAME == 'master') { + imageTag += "-${env.GIT_COMMIT.take(7)}" + } + + return imageTag +} + Void startEnvironment(String bezeichner, String stage, String imageTag, Boolean isEa) { setupAnsible(imageTag, stage, isEa) @@ -338,7 +357,7 @@ Void setAnsibleKubeConfig() { } } -Void checkoutProvisioningRepo(String stage) { +Void checkoutProvisioningRepo(String stage="") { withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { dir(stage) { sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' @@ -443,9 +462,15 @@ Void rolloutKopStack(String bezeichner, String stage) { "kop_postfach_api_key":"", \ "install_afm_adapter":false, \ "install_fs_adapter":false, \ - "external_db_enabled":false}""" + "external_db_enabled":false, \ + "disable_update":true}""" - sh "ansible-playbook playbooks/rollout.yml --extra-vars '${ansibleVars}'" + if (env.BRANCH_NAME == 'release') { + sh "ansible-playbook playbook/rollout.yml --extra-vars '${ansibleVars}'" + } + else { + sh "ansible-playbook playbooks/rollout.yml --extra-vars '${ansibleVars}'" + } } } } @@ -464,7 +489,12 @@ Void addKeycloakGroups(String bezeichner, String stage) { }""" dir("${stage}/provisioning") { - sh "ansible-playbook playbooks/add-keycloak-group.yml --extra-vars '${ansibleVars}'" + if (env.BRANCH_NAME == 'release') { + sh "ansible-playbook playbook/add-keycloak-group.yml --extra-vars '${ansibleVars}'" + } + else { + sh "ansible-playbook playbooks/add-keycloak-group.yml --extra-vars '${ansibleVars}'" + } } } } @@ -484,7 +514,12 @@ Void addKeycloakUser(String bezeichner, String stage) { }""" dir("${stage}/provisioning") { - sh "ansible-playbook playbooks/add-keycloak-user.yml --extra-vars '${ansibleVars}'" + if (env.BRANCH_NAME == 'release') { + sh "ansible-playbook playbook/add-keycloak-user.yml --extra-vars '${ansibleVars}'" + } + else { + sh "ansible-playbook playbooks/add-keycloak-user.yml --extra-vars '${ansibleVars}'" + } } } } @@ -497,7 +532,12 @@ Void deleteKopStack(String bezeichner, String stage) { "kop_env":"dev", \ "kop_bezeichner":${bezeichner}}""" - sh "ansible-playbook playbooks/delete-commune.yml --extra-vars '${ansibleVars}'" + if (env.BRANCH_NAME == 'release') { + sh "ansible-playbook playbook/delete-commune.yml --extra-vars '${ansibleVars}'" + } + else { + sh "ansible-playbook playbooks/delete-commune.yml --extra-vars '${ansibleVars}'" + } } } } @@ -534,7 +574,6 @@ String runTests(String stageName, String bezeichner, String reportFolder) { } } - String makeUrlConform(String input) { return input.replaceAll(/[^a-zA-Z0-9]+/, "").toLowerCase() } @@ -558,7 +597,6 @@ String cutBranchNameForKeycloakRealm(String branchName, String stageName) { return branchName } - String generateCypressConfig(String stage, String bezeichner, String testFolder) { def namespace = "sh-${bezeichner}-dev" def configName = "cypress-ci-"+testFolder+".json" @@ -633,4 +671,36 @@ Void initHelmRepo() { sh 'helm repo add ozg-base-apps-snapshot https://nexus.ozg-sh.de/repository/ozg-base-apps-snapshot --username ${USER} --password ${PASSWORD}' sh 'helm repo add ozg-base-apps https://nexus.ozg-sh.de/repository/ozg-base-apps --username ${USER} --password ${PASSWORD}' } +} + +Void setNewGoofyProvisioningVersion(String environment) { + dir("provisioning") { + def envFile = "inventories/group_vars/${environment}/versions" + + if (env.BRANCH_NAME == 'release') { + envFile = "playbook/inventory/versions/${environment}.yml" + } + def envVersions = readYaml file: envFile + + envVersions.versions.goofy.image.tag = IMAGE_TAG + + writeYaml file: envFile, data: envVersions, overwrite: true + } +} + +Void pushNewProvisioningVersion(String environment) { + withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { + dir('provisioning') { + if (env.BRANCH_NAME == 'release') { + sh 'git add playbook/inventory/versions/.' + } + else { + sh 'git add inventories/group_vars/*/versions' + } + sh 'git config user.email "jenkins@ozg.de"' + sh 'git config user.name "jenkins"' + sh "git commit -m 'jenkins rollout ${environment} goofy version ${IMAGE_TAG}'" + sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + } + } } \ No newline at end of file