pipeline { agent none triggers { pollSCM('H 0-3,10-23 * * *') } stages { stage('Build') { parallel { stage('HTML') { agent { docker { image 'silex/emacs:27.2-alpine-ci-cask' args '-u root --privileged' } } steps { sh 'cask' sh 'make html' // Because we're running in root, the public/ directory // isn't owned by the Jenkins user, meaning that // unstashing in a different stage fails. sh 'chown -R $(stat -c "%u" .):$(stat -c "%g" .) .cask .org-timestamps public' stash includes: 'public/**', name: 'public_html' } } stage('CSS') { agent { dockerfile true } steps { sh 'make css' stash includes: 'public/**', name: 'public_css' } } } } stage('Deploy') { agent { docker { image 'instrumentisto/rsync-ssh' args '-u root --privileged' } } steps { unstash 'public_html' unstash 'public_css' withCredentials([ sshUserPrivateKey( credentialsId: 'ryuslash.org-deploy-key-2', keyFileVariable: 'KEY_FILE', usernameVariable: 'USERNAME'), file( credentialsId: 'ryuslash-known-hosts', variable: 'KNOWN_HOSTS_FILE') ]) { sh 'rsync -e "ssh -p 4511 -o \\"UserKnownHostsFile $KNOWN_HOSTS_FILE\\" -i $KEY_FILE" -v -c -r --delete public/ "$USERNAME@ryuslash.org:ryuslash-next/"' } } } } }