I recently setup a Jenkins CICD service to complement the Travis based automation already in use where I work. I worked with job-based Jenkins workflows in the past - where we setup chains of interdependent jobs (ex: build, publish assets, deploy to dev environment, ...), but I took this opportunity to adopt Jenkins' new (to me) Pipeline pattern, and I'm glad I did.
A Jenkins pipeline defines (via a groovy DSL) a sequence of steps that execute together in a build under a single Jenkins job. Here's an example pipeline we use to backup our Jenkins configuration to S3 every night.
#!groovy pipeline { agent any stages { stage('BuildArchive'){ steps { echo "BuildArchive $env.JENKINS_HOME" sh "tar cvJf backup.tar.xz --exclude '$env.JENKINS_HOME/jobs/[^/]*/builds/*' --exclude '$env.JENKINS_HOME/jobs/[^/]*/last*' --exclude '$env.JENKINS_HOME/workspace' --exclude '$env.JENKINS_HOME/war' --exclude '$env.JENKINS_HOME/jobs/[^/]*/workspace/' $env.JENKINS_HOME" } } stage('UploadToS3') { steps { echo 'Upload to S3!' sh 'aws s3 cp --sse AES256 backup.tar.xz s3://cdis-terraform-state/JenkinsBackup/backup.$(date +%u).tar.xz' } } stage('Cleanup') { steps { echo 'Cleanup!' sh 'rm -f backup.tar.xz' } } } post { success { slackSend color: 'good', message: 'Jenkins backup pipeline succeeded' } failure { slackSend color: 'bad', message: 'Jenkins backup pipeline failed' } unstable { slackSend color: 'bad', message: 'Jenkins backup pipeline unstable' } } }
If you are a Jenkins user, then take the time to give Pipelines a try. If you're also using github or bitbucket - then look into Jenkins' support for organizations that nicely support pull-request based workflows. Also try the new Blue Ocean UI - it's designed with pipelines in mind.