Skip to content

Instantly share code, notes, and snippets.

@albertorm95
Created January 24, 2019 18:05
Show Gist options
  • Save albertorm95/525b0f9bf631eb68b3b4a4e0895f7e00 to your computer and use it in GitHub Desktop.
Save albertorm95/525b0f9bf631eb68b3b4a4e0895f7e00 to your computer and use it in GitHub Desktop.
This is an example of a pipeline that clone app repository create its Docker Image and then it clones a repository where all Stacks files are save and it updates an specific Stackfile then commits it and push it to master.
pipeline {
agent any
options {
skipDefaultCheckout(true)
}
stages {
stage("Clone Repository") {
steps {
slackSend channel: '#<Channel>', color: 'good', message: "$JOB_NAME - $BUILD_DISPLAY_NAME Started, (<$BUILD_URL|Open>)", tokenCredentialId: 'Slack-Token'
sshagent(['jenkins-github-ssh-key']) {
sh 'git clone --single-branch -b ${BRANCH_NAME} git@github.com:<GitHub Repository>'
}
}
}
stage("Build") {
steps {
dir('<Repositoy Name>') {
script {
sh "docker build -t <Private Registry>/<NameSpace>/<Repository>:$BUILD_NUMBER"
sh "docker push <Private Registry>/<NameSpace>/<Repository>:$BUILD_NUMBER"
}
}
}
}
stage("Update Stackfile") {
steps {
sshagent(['jenkins-github-ssh-key']) {
sh 'git clone --single-branch -b master git@github.com:<GitHub Path>/stackfiles.git'
dir('stackfiles/devCluster/app') {
sh 'git config user.name <GitHub User Name>'
sh 'git config user.email <GitHub User Email>'
script {
sh 'sudo -E perl -i -pe \'s/\\/app\\:\\d(.*)/\\/app:$ENV{"BUILD_NUMBER"}/g\' dev-stack.yml'
}
sh "git add ."
sh 'git commit -m "Jenkins - ${JOB_NAME} v${BUILD_NUMBER}" -m "${BUILD_URL}"'
sh 'git push origin master'
}
}
}
}
stage("Development Deploy") {
steps {
dir('stackfiles/devCluster/app') {
script {
sshPublisher(publishers: [sshPublisherDesc(configName: '<Server>', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'cd devCluster/app/ && sudo -E docker stack deploy -c dev-stack.yml dev', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'devCluster/app', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dev-stack.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
}
post {
success {
slackSend channel: '#<Channel>', color: 'good', message: "$JOB_NAME - $BUILD_DISPLAY_NAME Succeed, (<$BUILD_URL|Open>)", tokenCredentialId: 'Slack-Token'
}
failure {
slackSend channel: '#<Channel>', color: 'danger', message: "$JOB_NAME - $BUILD_DISPLAY_NAME Failed, (<$BUILD_URL|Open>)", tokenCredentialId: 'Slack-Token'
}
unstable {
slackSend channel: '#<Channel>', color: 'warning', message: "$JOB_NAME - $BUILD_DISPLAY_NAME Unstabled, (<$BUILD_URL|Open>)", tokenCredentialId: 'Slack-Token'
}
cleanup {
deleteDir()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment