diff --git a/Jenkinsfile b/Jenkinsfile index 310ed40948..34916fbce7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,25 +1,92 @@ -wrappedNode(label: 'ubuntu-1604 && x86_64') { - timeout(time: 60, unit: 'MINUTES') { - deleteDir() - stage "checkout" - checkout scm - sh "git submodule update --init --recursive" - stage "test" +def dtrVpnAddress = "vpn.corp-us-east-1.aws.dckr.io" +def ucpBundle = [file(credentialsId: "ucp-bundle", variable: 'UCP')] +def slackString = [string(credentialsId: 'slack-docs-webhook', variable: 'slack')] +def reg = [credentialsId: 'csebuildbot', url: 'https://index.docker.io/v1/'] - /* Jekyll creates html files to implement client side redirects. - There are absolute links to docs.docker.com in these htmls - we don't want them to be parsed by the tests for now. - Removing jekyll-redirect-from option will make sure these pages - are not generated when building with Jekyll. */ - sh "awk '/jekyll-redirect-from/{n=1}; n {n--; next}; 1' < _config.yml > _config.yml.tmp" - sh "mv _config.yml.tmp _config.yml" - - sh "docker build -t docs:${JOB_BASE_NAME}-${BUILD_NUMBER} `pwd`" - sh "docker build -t tests:${JOB_BASE_NAME}-${BUILD_NUMBER} `pwd`/tests" - sh "docker run -v /usr/src/app/allvbuild --name docs-${JOB_BASE_NAME}-${BUILD_NUMBER} docs:${JOB_BASE_NAME}-${BUILD_NUMBER} /bin/true" - sh "docker run --rm --volumes-from docs-${JOB_BASE_NAME}-${BUILD_NUMBER} -v `pwd`:/docs tests:${JOB_BASE_NAME}-${BUILD_NUMBER}" - sh "docker rm -fv docs-${JOB_BASE_NAME}-${BUILD_NUMBER}" - sh "docker rmi docs:${JOB_BASE_NAME}-${BUILD_NUMBER} tests:${JOB_BASE_NAME}-${BUILD_NUMBER}" - deleteDir() +pipeline { + agent none + options { + timeout(time: 1, unit: 'HOURS') + } + stages { + stage( 'docker.github.io' ) { + agent { + label 'ubuntu-1604-aufs-stable' + } + stages { + stage( 'build and push stage image' ) { + when { + branch 'master' + } + steps { + withDockerRegistry(reg) { + sh """ + docker image build --tag docs/docker.github.io:stage-${env.BUILD_NUMBER} . && \ + docker image push docs/docker.github.io:stage-${env.BUILD_NUMBER} + """ + } + } + } + stage( 'build and push prod image' ) { + when { + branch 'published' + } + steps { + withDockerRegistry(reg) { + sh """ + docker image build --tag docs/docker.github.io:prod-${env.BUILD_NUMBER} . && \ + docker image push docs/docker.github.io:prod-${env.BUILD_NUMBER} + """ + } + } + } + stage( 'update docs-stage' ) { + when { + branch 'master' + } + steps { + withVpn(dtrVpnAddress) { + withCredentials(ucpBundle) { + sh 'unzip -o $UCP' + } + withDockerRegistry(reg) { + sh """ + export DOCKER_TLS_VERIFY=1 + export COMPOSE_TLS_VERSION=TLSv1_2 + export DOCKER_CERT_PATH=${WORKSPACE}/ucp-bundle-success_bot + export DOCKER_HOST=tcp://ucp.corp-us-east-1.aws.dckr.io:443 + docker service update --detach=false --force --image docs/docker.github.io:stage-${env.BUILD_NUMBER} docs-stage-docker-com_docs --with-registry-auth + """ + } + } + } + } + stage( 'update docs-prod' ) { + when { + branch 'published' + } + steps { + withVpn(dtrVpnAddress) { + withCredentials(ucpBundle) { + sh 'unzip -o $UCP' + } + withCredentials(slackString) { + withDockerRegistry(reg) { + sh """ + cd ucp-bundle-success_bot + export DOCKER_TLS_VERIFY=1 + export COMPOSE_TLS_VERSION=TLSv1_2 + export DOCKER_CERT_PATH=${WORKSPACE}/ucp-bundle-success_bot + export DOCKER_HOST=tcp://ucp.corp-us-east-1.aws.dckr.io:443 + docker service update --detach=false --force --image docs/docker.github.io:prod-${env.BUILD_NUMBER} docs-docker-com_docs --with-registry-auth + curl -X POST -H 'Content-type: application/json' --data '{"text":"Successfully published docs. https://docs.docker.com/"}' $slack + """ + } + } + } + } + } + } + } } }