diff --git a/Jenkinsfile b/Jenkinsfile index d96d97f..1117991 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,27 +1,103 @@ + def params + def String[] envs + def String[] folders + def rootdirlist = '' + def envlist = '' + + pipeline { options { ansiColor('xterm') } agent{label 'jaws-slaves'} environment { - //xxu26128_TOKEN = credentials('dynatrace_automation_token_emea_prod') - //qqk70169_TOKEN = credentials('dynatrace_automation_token_emea_preprod') - //wgv50241_TOKEN = credentials('dynatrace_automation_token_na_prod') - //onb44935_TOKEN = credentials('dynatrace_automation_token_na_preprod') - //CN_Prod_TOKEN = credentials('dynatrace_automation_token_cn_prod') - //CN_PreProd_TOKEN = credentials('dynatrace_automation_token_cn_preprod') + CICD_Testing_TOKEN = credentials('dynatrace_automation_testing_token') - } - + stages { - stage('Checkout') { + stage('Git checkout') { steps { - git branch: '${branch}', credentialsId: 'jaws_dynatrace_bitbuket_user', url: 'https://atc.bmwgroup.net/bitbucket/scm/opapm/maasglobal_cicdtest.git' + git credentialsId: 'jaws_dynatrace_bitbuket_user', url: 'https://atc.bmwgroup.net/bitbucket/scm/opapm/maasglobal_cicdtest.git' + sh ''' + git branch -r | sed -e 's/origin\\///g' |sed '/HEAD/d' >> branchlist.txt + ''' } - } - stage('Install Monaco CLI') { + } + stage ('Branch selection') { + steps { + script { + def branchlist = readFile 'branchlist.txt' + echo "please click on the link here to chose the branch to build" + env.BRANCH_SCOPE = input (message: 'Please choose the branch to build ', + parameters: [choice(name: 'BRANCH_NAME', choices: branchlist, description: 'Branch to build?')]) + } + } + } + stage ('Environment and Application selection') { + steps { + sh ''' + git checkout ${BRANCH_SCOPE} + sed '/^ /d' environment.yaml| sed 's/://g' >> envlist.txt + #echo "none" > rootdir.txt + ls -ld */ | cut -d' ' -f 9| sed 's/\\///g' >> rootdir.txt + cat rootdir.txt + ''' + script { + def lines = readFile("${workspace}/rootdir.txt").readLines() + def envlines = readFile("${workspace}/envlist.txt").readLines() + lines.each { def line -> + rootdirlist = rootdirlist+',' + rootdirlist = rootdirlist+line + } + + envlines.each { def line -> + envlist = envlist+',' + envlist = envlist+line + } + + + rootdirlist = rootdirlist.substring(1) + envlist = envlist.substring(1) + println(rootdirlist) + + echo "please click on the link here to choose environment to deploy" + + params = input( + id: 'user_Input', + message: 'Promote:', + parameters: [ + [ + name: 'ENVIRONMENT', + $class: 'ExtendedChoiceParameterDefinition', + type: 'PT_MULTI_SELECT', + value: "${envlist}", + description: 'Select Environment(s)' + ], + [ + name: 'APPLICATION', + $class: 'ExtendedChoiceParameterDefinition', + type: 'PT_MULTI_SELECT', + value: "${rootdirlist}", + description: 'Select Application(s)' + ], + [ + name: 'DRY_RUN', + $class: 'BooleanParameterDefinition', + defaultValue: false, + description: 'Do you want to execute a dry run only?' + ] + ] + ) + + envs = params['ENVIRONMENT'].split(','); + folders = params['APPLICATION'].split(','); + + } + } + } + stage('Monaco CLI setup') { steps { sh ''' wget "https://github.com/dynatrace-oss/dynatrace-monitoring-as-code/releases/download/v1.5.0/monaco-linux-amd64" @@ -32,74 +108,50 @@ } stage('Monaco dry run') { steps { - script { - Map functionMap = evaluate("${projectMap}") - if(functionMap == null){ - if(environment != 'ALL'){ - sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml -se $environment --dry-run ); done''' - } else{ - sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml --dry-run ); done''' - } - } else{ - for (rootFolder in functionMap.keySet()) { - def projects = functionMap.getAt(rootFolder) - if(environment != 'ALL'){ - if(projects != ''){ - sh "monaco -v -e $WORKSPACE/environment.yaml -se $environment -p $projects --dry-run $WORKSPACE/$rootFolder" - } else{ - sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml -se $environment --dry-run" - } - } else { - if(projects != ''){ - sh "monaco -v -e $WORKSPACE/environment.yaml -p $projects --dry-run $WORKSPACE/$rootFolder" - } else{ - sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml --dry-run" - } - } - } - } - } - } - } - stage('Approval') { - steps { - script { - def userInput = input(id: 'confirm', message: 'Deploy dynatrace config?', parameters: [ [$class: 'BooleanParameterDefinition', defaultValue: true, description: 'Deploy dynatrace config', name: 'confirm'] ]) - } - } + script { + println("value of env: "+ params['ENVIRONMENT']) + println("value of root folder: "+ params['APPLICATION']) + if(envs != null){ + envs.each { env -> + if(params['APPLICATION'] != null){ + folders.each { folder -> + sh "cd ${folder} && monaco -v -e $WORKSPACE/environment.yaml -se ${env} --dry-run" + } + } else{ + println "Application not selected" + } + } + } else { + println "Environment not selected" + } + } + } } + stage('Dynatrace config deployment') { + when { + + expression { params.DRY_RUN == false } + } steps { script { - Map functionMap = evaluate("${projectMap}") - - if(functionMap == null){ - if(environment != 'ALL'){ - sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml -se $environment); done''' - } else{ - sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml ); done''' - } - } else{ - for (rootFolder in functionMap.keySet()) { - def projects = functionMap.getAt(rootFolder) - if(environment != 'ALL'){ - if(projects != ''){ - sh "monaco -v -e $WORKSPACE/environment.yaml -se $environment -p $projects $WORKSPACE/$rootFolder" - } else{ - sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml -se $environment" - } - } else { - if(projects != ''){ - sh "monaco -v -e $WORKSPACE/environment.yaml -p $projects $WORKSPACE/$rootFolder" - } else{ - sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml" - } - } - } + if(envs != null){ + envs.each { env -> + if(params['APPLICATION'] != null){ + folders.each { folder -> + sh "set +x && echo ------------ Starting Deployment on environment $env for app $folder -----------" + sh "cd ${folder} && monaco -v -e $WORKSPACE/environment.yaml -se ${env}" + } + } else{ + println "Application not selected" + } + } + } else { + println "Environment not selected" + } } } } - } } post { always { @@ -107,4 +159,4 @@ } } } - \ No newline at end of file + diff --git a/Jenkinsfile_bkp b/Jenkinsfile_bkp new file mode 100644 index 0000000..d96d97f --- /dev/null +++ b/Jenkinsfile_bkp @@ -0,0 +1,110 @@ + pipeline { + options { + ansiColor('xterm') + } + agent{label 'jaws-slaves'} + environment { + //xxu26128_TOKEN = credentials('dynatrace_automation_token_emea_prod') + //qqk70169_TOKEN = credentials('dynatrace_automation_token_emea_preprod') + //wgv50241_TOKEN = credentials('dynatrace_automation_token_na_prod') + //onb44935_TOKEN = credentials('dynatrace_automation_token_na_preprod') + //CN_Prod_TOKEN = credentials('dynatrace_automation_token_cn_prod') + //CN_PreProd_TOKEN = credentials('dynatrace_automation_token_cn_preprod') + CICD_Testing_TOKEN = credentials('dynatrace_automation_testing_token') + + + } + + stages { + stage('Checkout') { + steps { + git branch: '${branch}', credentialsId: 'jaws_dynatrace_bitbuket_user', url: 'https://atc.bmwgroup.net/bitbucket/scm/opapm/maasglobal_cicdtest.git' + } + } + stage('Install Monaco CLI') { + steps { + sh ''' + wget "https://github.com/dynatrace-oss/dynatrace-monitoring-as-code/releases/download/v1.5.0/monaco-linux-amd64" + sudo cp monaco-linux-amd64 /usr/local/bin/monaco + sudo chmod +x /usr/local/bin/monaco + ''' + } + } + stage('Monaco dry run') { + steps { + script { + Map functionMap = evaluate("${projectMap}") + if(functionMap == null){ + if(environment != 'ALL'){ + sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml -se $environment --dry-run ); done''' + } else{ + sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml --dry-run ); done''' + } + } else{ + for (rootFolder in functionMap.keySet()) { + def projects = functionMap.getAt(rootFolder) + if(environment != 'ALL'){ + if(projects != ''){ + sh "monaco -v -e $WORKSPACE/environment.yaml -se $environment -p $projects --dry-run $WORKSPACE/$rootFolder" + } else{ + sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml -se $environment --dry-run" + } + } else { + if(projects != ''){ + sh "monaco -v -e $WORKSPACE/environment.yaml -p $projects --dry-run $WORKSPACE/$rootFolder" + } else{ + sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml --dry-run" + } + } + } + } + } + } + } + stage('Approval') { + steps { + script { + def userInput = input(id: 'confirm', message: 'Deploy dynatrace config?', parameters: [ [$class: 'BooleanParameterDefinition', defaultValue: true, description: 'Deploy dynatrace config', name: 'confirm'] ]) + } + } + } + stage('Dynatrace config deployment') { + steps { + script { + Map functionMap = evaluate("${projectMap}") + + if(functionMap == null){ + if(environment != 'ALL'){ + sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml -se $environment); done''' + } else{ + sh '''for d in ./*/ ; do (cd "$d" && monaco -v -e $WORKSPACE/environment.yaml ); done''' + } + } else{ + for (rootFolder in functionMap.keySet()) { + def projects = functionMap.getAt(rootFolder) + if(environment != 'ALL'){ + if(projects != ''){ + sh "monaco -v -e $WORKSPACE/environment.yaml -se $environment -p $projects $WORKSPACE/$rootFolder" + } else{ + sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml -se $environment" + } + } else { + if(projects != ''){ + sh "monaco -v -e $WORKSPACE/environment.yaml -p $projects $WORKSPACE/$rootFolder" + } else{ + sh "cd $rootFolder && monaco -v -e $WORKSPACE/environment.yaml" + } + } + } + } + } + } + } + } + post { + always { + cleanWs() + } + } +} + \ No newline at end of file