diff --git a/Jenkinsfile b/Jenkinsfile index 2969809bb535dce42fe37865a81b4d29b55b60c7..1f909ef5a02c987fd514c45aa951701dc36094ca 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -155,64 +155,36 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - } - container("k8s"){ - script { - sh """ - error=0 - for NAMESPACE in \$(kubectl get namespaces -l ozg-environment=dev -o custom-columns=NAME:.metadata.name --no-headers); \ - do \ - if kubectl get deployment -n \$NAMESPACE | grep afm; then \ - kubectl rollout restart deployment/afm -n \$NAMESPACE; \ - if ! kubectl rollout status deployment/afm -n \$NAMESPACE; then \ - error=1; \ - fi; \ - fi; \ - if kubectl get deployment -n \$NAMESPACE | grep fs; then \ - kubectl rollout restart deployment/fs -n \$NAMESPACE; \ - if ! kubectl rollout status deployment/fs -n \$NAMESPACE; then \ - error=1; \ - fi; \ - fi; \ - if kubectl get deployment -n \$NAMESPACE | grep if; then \ - kubectl rollout restart deployment/if -n \$NAMESPACE; \ - if ! kubectl rollout status deployment/if -n \$NAMESPACE; then \ - error=1; \ - fi; \ - fi; \ - done - exit \$error - """ - } + rolloutDev() } } } - stage('Trigger Test | Stage rollout') { + stage('Trigger Test | Stage rollout') { when { - branch 'release' - } - - steps { - script { - FAILED_STAGE = env.STAGE_NAME - + // todo rename to release + branch 'ozg-2502' + } + + 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/rollout.git' + sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' - dir('rollout') { - sh "sed -i 's/IF_ADAPTER_APP_VERSION\\=.*/IF_ADAPTER_APP_VERSION=${version}/' versions/test/versions.sh" - sh "sed -i 's/IF_ADAPTER_APP_VERSION\\=.*/IF_ADAPTER_APP_VERSION=${version}/' versions/stage/versions.sh" - - sh 'git add versions/.' - sh 'git config user.email "jenkins@ozg.de"' - sh 'git config user.name "jenkins"' - sh "git commit -m 'jenkins rollout if-adapter ${version}'" - sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/rollout.git' + // todo remove + dir('provisioning') { + sh 'git checkout ozg-2502' } + + setNewProvisioningVersion('test', version) + setNewProvisioningVersion('stage', version) + + pushNewProvisioningVersion(USER, TOKEN, version) } } } @@ -250,4 +222,56 @@ String getElementAccessToken() { withCredentials([string(credentialsId: 'element-login-json', variable: 'LOGIN_JSON')]) { return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token } +} + +Void restartDeployment(namespace, deployment) { + sh "kubectl rollout restart deployment/${deployment} -n ${namespace}" + sh "kubectl rollout status deployment/${deployment} -n ${namespace}" +} + +String getDeployments(namespace) { + return sh (script: "kubectl get deployment -n \$NAMESPACE", returnStdout: true) +} + +Void rolloutDev() { + def namespaces = sh(script: '''kubectl get namespaces -l 'ozg-environment=dev,update-namespace notin (false)' -o custom-columns=NAME:.metadata.name --no-headers''', returnStdout: true) + printl "namespaces: ${namespaces}" + + namespaces.each { namespace -> + deployments = getDeployments(namespace) + + if (deployments.contains("fs-adapter")) { + restartDeployment(namespace, "fs-adapter") + } + + if (deployments.contains("afm-adapter")) { + restartDeployment(namespace, "afm-adapter") + } + + if (deployments.contains("if-adapter")) { + restartDeployment(namespace, "if-adapter") + } + } +} + +Void setNewProvisioningVersion(String environment, String version) { + dir("provisioning") { + def envFile = "playbook/inventory/versions/${environment}.yml" + def envVersions = readYaml file: envFile + + envVersions.versions.afm_adapter.image.tag = version + envVersions.versions.fs_adapter.image.tag = version + + 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 afm-adapter fs-adapter test stage version ${version}'" + sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + } } \ No newline at end of file