@Library('shared-lib') _ import tech.avroid.jenkins.Notifications import groovy.json.JsonOutput import java.text.SimpleDateFormat properties([ buildDiscarder(logRotator(artifactNumToKeepStr: '10', numToKeepStr: '10')), disableConcurrentBuilds(), pipelineTriggers([ cron('H 6 * * *') ]) ]) List tests = [ [ expectedCode: '201', method: 'POST', URL: '/api/activate', body: [ "activation_key_id": "C0AE-AC61-20E0-18D5", "vendor_app_id": "tavro_aurora", "device_id": "FCA4PZgXnFBJUfQUpXlS3iyqXcXog9Qd8xEa8qp267I=", "app_version": "5.2.4", "check_only": false ] ], [ expectedCode: '404', method: 'POST', URL: '/api/activate', body: [ "activation_key_id": "C0AE-AC61-20E0-18D", "vendor_app_id": "tavro_aurora", "device_id": "FCA4PZgXnFBJUfQUpXlS3iyqXcXog9Qd8xEa8qp267I=", "app_version": "5.2.4", "check_only": false ] ], [ expectedCode: '201', method: 'POST', URL: '/api/activate', body: [ "activation_key_id": "C0AE-AC61-20E0-18D5", "vendor_app_id": "tavro_aurora", "device_id": "FCA4PZgXnFBJUfQUpXlS3iyqXcXog9Qd8xEa8qp267I=", "app_version": "5.0.1", "check_only": false ] ], [ expectedCode: '400', method: 'POST', URL: '/api/activate', body: [ "activation_key_id": "C0AE-AC61-20E0-18D5", "vendor_app_id": "tavro_aurora", "device_id": "FCA4PZgXnFBJUfQUpXlS3iyqXcXog9Qd8xEa8qp267I=", "app_version": "1.2.4", "check_only": false ] ], [ expectedCode: '201', method: 'POST', URL: '/api/activate', body: [ "activation_key_id": "A7F9-072A-D239-7D67", "vendor_app_id": "tavro_aurora_lite", "device_id": "[AvroidActivation]", "app_version": "5.2.4", "check_only": true ] ] ] String recipient = "devops@avroid.team" Object date = new Date() Object todayDate = new SimpleDateFormat("yyyy-MM-dd") String licBackupServer = 'h-license-manager-backup-server.avroid.cloud' Map configuration = [ vaultUrl: 'https://vault.avroid.tech', vaultCredentialId: 'vault-role', engineVersion: 2 ] List sshPassword = [ [path: 'team-devops/accounts/ldap/service_accounts/svc_jenkins', engineVersion: 2, secretValues: [ [vaultKey: 'password'], ] ] ] todayDate = todayDate.format(date) String cmdUnarchiveBackup = "bzip2 -d license_server-${todayDate}.sql.bz2" String cmdClearDockerTmp = "docker exec postgresql rm -rf /tmp/*" String cmdCopyRoles = "docker cp roles-${todayDate}.sql postgresql:/tmp" String cmdCopyDB = "docker cp license_server-${todayDate}.sql postgresql:/tmp" String cmdRestoreRoles = "docker exec postgresql psql -U postgres -p 5432 -d postgres -f /tmp/roles-${todayDate}.sql" String cmdDropDB = "docker exec postgresql dropdb -p 5432 -U postgres -f --if-exists license_server" String cmdRestoreDB = "docker exec postgresql pg_restore -Fc -U postgres -p 5432 -d postgres -C -d postgres -v /tmp/license_server-${todayDate}.sql" String cmdClearTmp = "rm -rf /home/jenkins/*" node('slave01') { try { stage('Restore backup') { withVault([configuration: configuration, vaultSecrets: sshPassword]) { sh """ sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdUnarchiveBackup} sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdClearDockerTmp} sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdCopyRoles} sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdCopyDB} sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdRestoreRoles} sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdDropDB} sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdRestoreDB} sshpass -p $password ssh -o StrictHostKeychecking=no jenkins@${licBackupServer} ${cmdClearTmp} """ } } stage('Run tests'){ tests.each { test -> httpRequest( url: "http://${licBackupServer}${test.URL}", contentType: 'APPLICATION_JSON', httpMode: test.method, validResponseCodes: test.expectedCode, requestBody: JsonOutput.toJson(test.body) ) } } } catch(err) { errorMessage = err.getMessage() println 'ERROR: ' + errorMessage currentBuild.result = 'FAILURE' String emailSubject = "${currentBuild.currentResult}. " + "Pipeline task: ${currentBuild.fullDisplayName}" Notifications.email( script: this, subject: emailSubject, errorString: errorMessage, recipientProviders: [], to: recipient ) } }