Created
January 10, 2018 19:11
-
-
Save jmaitrehenry/c00370fda65e618490efb063ce6aa941 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pipeline { | |
agent { | |
label 'jenkins-builder' | |
} | |
options { | |
ansiColor('xterm') | |
timestamps() | |
disableConcurrentBuilds() | |
timeout(time: 1, unit: 'HOURS') | |
buildDiscarder(logRotator(numToKeepStr: '5')) | |
} | |
environment { | |
DOCKER_TOKEN = "DOCKER_TOKEN" | |
DOCKER_IMAGE_NAME = "gcr.io/jenkins-160014/petalmd.web" | |
WORKERS = 1 | |
// BUILD_NUMBER = env.BUILD_NUMBER | |
BUILD_LABEL = buildLabel() | |
DOCKER_PRELOAD = "cypress/base:8 petalmd/petalmd.rails:master theasci/docker-mysql-tmpfs redis:3.2 elasticsearch:1.7" | |
} | |
stages { | |
// Pre-build phase | |
stage('Git merge master') { | |
when { | |
not { | |
branch 'master' | |
} | |
} | |
steps { | |
mergeMaster() | |
} | |
} | |
stage('Prepare build') { | |
parallel { | |
stage('Prepare docker image') { | |
steps { | |
sh "docker pull jmaitrehenry/google-cloud-sdk 1> /dev/null" | |
sh "docker login -u ${dockerUser} -p '${dockerPass}'" | |
sh ''' | |
export FRONTEND_IMAGE=${DOCKER_IMAGE_NAME}:${GIT_COMMIT} | |
docker-compose -f docker-compose.yml -f docker-compose.test.yml up -d --build frontend | |
docker run --rm -i -v /ci/jenkins/gcloud:/root/.config/gcloud -v /var/run/docker.sock:/var/run/docker.sock jmaitrehenry/google-cloud-sdk gcloud docker -- push ${FRONTEND_IMAGE} 1> /dev/null | |
''' | |
} | |
} | |
stage('Provision build environment') { | |
steps { | |
provisionBuildEnvironment() | |
} | |
} | |
} | |
} | |
stage('Run') { | |
parallel { | |
stage('Lints') { | |
steps { | |
sh ''' | |
#!/bin/bash | |
docker-compose -f docker-compose.yml -f docker-compose.test.yml run test bin/ci -l | |
''' | |
} | |
} | |
stage('unit') { | |
agent { | |
label buildLabel() | |
} | |
steps { | |
sh 'echo "units!!"' | |
} | |
} | |
stage('E2E') { | |
agent { | |
label buildLabel() | |
} | |
steps { | |
sh 'echo "e2e!!"' | |
} | |
} | |
} | |
} | |
post { | |
always { | |
sh 'echo "Deprovision build environment"' | |
deprovisionBuildEnvironment() | |
sh 'echo "Validate test results"' | |
sh 'echo "Validate test results"' | |
} | |
} | |
} | |
} | |
def mergeMaster() { | |
sshagent (credentials: ['Github_deploy_key']) { | |
sh 'git fetch origin master' | |
} | |
sh ''' | |
git config user.email [email protected] | |
git config user.name "Jenkins" | |
git checkout FETCH_HEAD | |
git merge --ff -q origin/$BRANCH_NAME | |
''' | |
} | |
def provisionBuildEnvironment() { | |
sh ''' | |
#!/bin/bash | |
docker pull jmaitrehenry/google-cloud-sdk 1> /dev/null | |
docker run --rm -i \ | |
-v /ci/jenkins/gcloud:/root/.config/gcloud \ | |
-v `pwd`/config:/config \ | |
jmaitrehenry/google-cloud-sdk \ | |
gcloud deployment-manager deployments create ${BUILD_LABEL} \ | |
--config /config/gce.jinja \ | |
--properties targetSize:${WORKERS},buildId:${BUILD_NUMBER},buildName:${BUILD_LABEL},dockerPreloadImage:"${DOCKER_PRELOAD}" | |
''' | |
} | |
def deprovisionBuildEnvironment() { | |
sh ''' | |
docker run --rm -i \ | |
-v /ci/jenkins/gcloud:/root/.config/gcloud \ | |
jmaitrehenry/google-cloud-sdk \ | |
gcloud deployment-manager deployments delete -q --async ${BUILD_LABEL} | |
''' | |
script { | |
for (aSlave in hudson.model.Hudson.getInstance().getSlaves()) { | |
if (aSlave.getLabelString() == envName) { | |
aSlave.toComputer().doDoDelete(); | |
println('Node ' + aSlave.getNodeName() + ' deleted'); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment