Skip to content

Instantly share code, notes, and snippets.

@mousetree
Created July 12, 2018 09:57
Show Gist options
  • Save mousetree/bbacbe426982862c2b7d30e6a011a021 to your computer and use it in GitHub Desktop.
Save mousetree/bbacbe426982862c2b7d30e6a011a021 to your computer and use it in GitHub Desktop.
Multi environment CircleCI build
version: 2
jobs:
test:
docker:
- image: circleci/node:10
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
- v1-dependencies-
- run:
name: Install dependencies
command: npm install
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}
- run:
name: Run tests
command: npm test
- store_test_results:
path: test-results
deploy:
docker:
- image: google/cloud-sdk
environment:
- PROJECT_NAME: "my-app"
- GOOGLE_PROJECT_ID: "my-app"
- GOOGLE_COMPUTE_ZONE: "europe-west3-a"
- GOOGLE_CLUSTER_NAME: "cluster-1"
steps:
- checkout
- run:
name: Setup Google Cloud SDK
command: |
apt-get install -qq -y gettext
echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json
gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}
gcloud --quiet container clusters get-credentials ${GOOGLE_CLUSTER_NAME}
- setup_remote_docker
- run:
name: Docker build and push
command: |
docker build \
--build-arg COMMIT_REF=${CIRCLE_SHA1} \
--build-arg BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` \
--build-arg BUILD_BRANCH=${CIRCLE_BRANCH} \
-t ${PROJECT_NAME} .
docker tag ${PROJECT_NAME} eu.gcr.io/${GOOGLE_PROJECT_ID}/${PROJECT_NAME}-${CIRCLE_BRANCH}:${CIRCLE_SHA1}
gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://eu.gcr.io
docker push eu.gcr.io/${GOOGLE_PROJECT_ID}/${PROJECT_NAME}-${CIRCLE_BRANCH}:${CIRCLE_SHA1}
- run:
name: Deploy to Kubernetes
command: |
envsubst < ${HOME}/project/k8s.yml > ${HOME}/patched_k8s.yml
kubectl apply -n ${CIRCLE_BRANCH} -f ${HOME}/patched_k8s.yml
kubectl rollout -n ${CIRCLE_BRANCH} status deployment/${PROJECT_NAME}
workflows:
version: 2
build_test_deploy:
jobs:
- test
- deploy:
requires:
- test
filters:
branches:
only:
- master
- develop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment