pipeline { agent { label 'puppet' } post { always { deleteDir() /* clean up our workspace */ } success { updateGitlabCommitStatus state: 'success' } failure { updateGitlabCommitStatus state: 'failed' step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: 'support@confdroid.com', sendToIndividuals: true]) } } options { gitLabConnection('sourcecode.confdroid.com') } stages { stage('pull master') { steps { sshagent(['edd05eb6-26b5-4c7b-a5cc-ea2ab899f4fa']) { sh '''git config user.name "Jenkins Server" git config user.email jenkins@confdroid.com git pull origin master git checkout -b jenkins ''' } } } stage('puppet parser') { steps { sh '''for file in $(find . -iname \'*.pp\'); do /opt/puppetlabs/bin/puppet parser validate --color false --render-as s --modulepath=modules $file || exit 1; done;''' } } stage('check templates') { steps{ sh '''for file in $(find . -iname \'*.erb\'); do erb -P -x -T "-" $file | ruby -c || exit 1; done;''' } } stage('puppet-lint') { steps { sh '''find . -iname *.pp -exec /usr/local/rvm/gems/ruby-2.5.0/wrappers/puppet-lint \\ --no-class_inherits_from_params_class-check \\ --no-variable_scope-check \\ --no-80chars-check \\ --no-arrow_alignment-check \\ --no-autoloader_layout-check \\ --no-140chars-check \\ --log-format "%{path}:%{line}:%{check}:%{KIND}:%{message}" {} \\; ''' /* recordIssues aggregatingResults: true, tool: puppetLint() */ } } stage('SonarScan') { steps { sh ''' /opt/sonar-scanner/bin/sonar-scanner \ -Dsonar.projectKey=postgresql_cd\ -Dsonar.sources=. \ -Dsonar.host.url=https://sonarqube.confdroid.com \ -Dsonar.token=sqa_47a9b746282839a5c18e520ce37c0805fc4ed1d6 ''' } } stage('create Puppet documentation') { steps { sh '/opt/puppetlabs/bin/puppet strings' } } stage('update repo') { steps { sshagent(['edd05eb6-26b5-4c7b-a5cc-ea2ab899f4fa']) { sh '''git config user.name "Jenkins Server" git config user.email jenkins@confdroid.com echo `git add -A && git commit -am "recommit for updates in build $BUILD_NUMBER"` git push origin HEAD:master''' } } } } }