Skip to content

Instantly share code, notes, and snippets.

@jmaitrehenry
Created January 10, 2018 19:11
Show Gist options
  • Save jmaitrehenry/c00370fda65e618490efb063ce6aa941 to your computer and use it in GitHub Desktop.
Save jmaitrehenry/c00370fda65e618490efb063ce6aa941 to your computer and use it in GitHub Desktop.
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 jenkins@petalmd.com
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