diff --git a/Jenkinsfile b/Jenkinsfile index a65c0ed1d4c079008dab70a9a685e536c16b367b..5c20846045d5bbd76178db777912239d71a6c638 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -103,6 +103,31 @@ pipeline { } } + stage('Sonar Checks') { + steps { + script { + FAILED_STAGE=env.STAGE_NAME + } + container("maven-17") { + configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { + dir('user-manager-server') { + script { + try { + if (env.BRANCH_NAME == 'master') { + withSonarQubeEnv('sonarqube-ozg-sh'){ + sh 'mvn -s $MAVEN_SETTINGS sonar:sonar' + } + } + } catch (Exception e) { + unstable("SonarQube failed") + } + } + } + } + } + } + } + stage('Push Docker image') { steps { script { @@ -136,55 +161,62 @@ pipeline { } } - stage('Deploy UserManager') { - when { - anyOf { - branch 'master' - branch 'release' - } - } - - steps { - script { - FAILED_STAGE = env.STAGE_NAME - } - container("kubectl"){ - script { - if (env.BRANCH_NAME == 'master') { - sh 'kubectl rollout restart deployment/user-manager -n sh-kiel-dev' - sh 'kubectl rollout status deployment/user-manager -n sh-kiel-dev' - - // sh 'kubectl rollout restart deployment/user-manager -n sh-ea-dev' - // sh 'kubectl rollout status deployment/user-manager -n sh-ea-dev' - } - } - } - } - } - - stage('Sonar Checks') { - steps { - script { - FAILED_STAGE=env.STAGE_NAME + stage('Rollout Dev UserManager') { + when { + branch 'master' + } + steps { + script { + FAILED_STAGE = env.STAGE_NAME + initK8s() + + container("k8s"){ + 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 user-manager; then \ + kubectl rollout restart deployment/user-manager -n \$NAMESPACE; \ + if ! kubectl rollout status deployment/user-manager -n \$NAMESPACE; then \ + error=1; \ + fi; \ + fi; \ + done + exit \$error + """ + } } - container("maven-17") { - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - dir('user-manager-server') { - script { - try { - if (env.BRANCH_NAME == 'master') { - withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'mvn -s $MAVEN_SETTINGS sonar:sonar' - } - } - } catch (Exception e) { - unstable("SonarQube failed") - } - } + } + } + + stage('Trigger Test | Stage rollout') { + when { + // 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/provisioning.git' + + // todo remove + dir('provisioning') { + sh 'git checkout ozg-2502' } - } + + setNewProvisioningVersion('test', version) + setNewProvisioningVersion('stage', version) + + pushNewProvisioningVersion(USER, TOKEN, version) + } } - } + } } } @@ -221,3 +253,33 @@ String getElementAccessToken() { return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token } } + +Void setNewProvisioningVersion(String environment, String version) { + dir("provisioning") { + def envFile = "playbook/inventory/versions/${environment}.yml" + def envVersions = readYaml file: envFile + + envVersions.versions.user_manager.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 user-manager test stage version ${version}'" + sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + } +} + +Void initK8s(){ + container("k8s") { + configFileProvider([configFile(fileId: 'jenkins-kuby-kubeconfig', variable: 'KUBE_CONFIG')]) { + sh 'mkdir ~/.kube' + sh 'cp ${KUBE_CONFIG} ~/.kube/config' + } + } +} \ No newline at end of file