diff --git a/Jenkinsfile b/Jenkinsfile index a76dd601ba9ab783b7b1a88a505f28a41d3ac38c..d3b1d62ddf287c00f17f4a22ba0d6c6e7d13f2ac 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,80 +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') } - } - } - } - stage('Rollout Dev Goofy') { - when { - branch 'master' - } - steps { - script { - FAILED_STAGE = env.STAGE_NAME - } - - container("k8s"){ - script { - sh """ - error=0 - for NAMESPACE in \$(kubectl get namespaces -l 'ozg-environment=dev,update-namespace notin (false)' -o custom-columns=NAME:.metadata.name --no-headers); \ - do \ - if kubectl get deployment -n \$NAMESPACE | grep goofy; then \ - kubectl rollout restart deployment/goofy -n \$NAMESPACE; \ - if ! kubectl rollout status deployment/goofy -n \$NAMESPACE; then \ - error=1; \ - fi; \ - fi; \ - done - exit \$error - """ + else if (env.BRANCH_NAME == 'release') { + tagAndPushDockerImage('latest') } } } } - stage('Trigger Test | Stage rollout') { + stage('Trigger Dev rollout') { when { - // todo rename to release - branch 'ozg-2387' + branch 'master' } - steps { script { FAILED_STAGE = env.STAGE_NAME - def pom = readMavenPom file: 'pom.xml' - def version = pom.version - - withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { - sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + checkoutProvisioningRepo() - // todo remove - dir('provisioning') { - sh 'git checkout ozg-2502' - } - - setNewGoofyProvisioningVersion('test', version) - setNewGoofyProvisioningVersion('stage', version) + setNewGoofyProvisioningVersion('dev') - pushNewProvisioningVersion(USER, TOKEN, version) - } + pushNewProvisioningVersion('dev') } } } @@ -318,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 { @@ -330,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) @@ -369,10 +357,10 @@ 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' + sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' // todo remove git checkout dir('provisioning') { @@ -548,7 +536,6 @@ String runTests(String stageName, String bezeichner, String reportFolder) { } } - String makeUrlConform(String input) { return input.replaceAll(/[^a-zA-Z0-9]+/, "").toLowerCase() } @@ -572,7 +559,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" @@ -649,23 +635,25 @@ Void initHelmRepo() { } } -Void setNewGoofyProvisioningVersion(String environment, String version) { +Void setNewGoofyProvisioningVersion(String environment) { dir("provisioning") { def envFile = "playbook/inventory/versions/${environment}.yml" def envVersions = readYaml file: envFile - envVersions.versions.goofy.image.tag = version + envVersions.versions.goofy.image.tag = IMAGE_TAG writeYaml file: envFile, data: envVersions, overwrite: true } } -Void pushNewProvisioningVersion(String user, String token, String version) { - dir('provisioning') { - sh 'git add playbook/inventory/versions/.' - sh 'git config user.email "jenkins@ozg.de"' - sh 'git config user.name "jenkins"' - sh "git commit -m 'jenkins rollout goofy test stage version ${version}'" - sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' +Void pushNewProvisioningVersion(String environment) { + withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { + dir('provisioning') { + sh 'git add playbook/inventory/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