Skip to content

Instantly share code, notes, and snippets.

@afoninsky
Created September 19, 2016 09:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save afoninsky/110148adcb12e00bace40e4c1c25ee18 to your computer and use it in GitHub Desktop.
Save afoninsky/110148adcb12e00bace40e4c1c25ee18 to your computer and use it in GitHub Desktop.
general:
branches:
ignore: # https://discuss.circleci.com/t/deploy-on-tag-not-running-please-help/5104/8
- /^(?!noSuchBranch).*$/
machine:
environment:
REGISTRY_URL: us.gcr.io
GOOGLE_PROJECT_NAME: spair-api
CLUSTER_NAME: edissons-cluster
CLOUDSDK_COMPUTE_ZONE: us-central1-f
SERVICE_NAME: helloworld
services:
- docker
dependencies:
pre:
# spread variables to all commands
- echo "export IMAGE_TAG=$REGISTRY_URL/$GOOGLE_PROJECT_NAME/$SERVICE_NAME:${CIRCLE_TAG:-`jq -r '"v" + .version' package.json`}" >> ~/.circlerc
override:
# build docker image with service
- docker build -t $IMAGE_TAG .
test:
override:
- echo $CIRCLE_TAG
# run tests and push coverage report to artifacts so circleci can display it
# secutiry issue: coverage reports can show your code to unauthorized users
# - mkdir -p $CIRCLE_ARTIFACTS/coverage
# - docker run -v $CIRCLE_ARTIFACTS/coverage:/usr/src/app/coverage $IMAGE_TAG bash -c "npm test && ./node_modules/.bin/nyc report --reporter html"
- docker run $IMAGE_TAG npm test
deployment:
staging:
tag: /v[0-9]+(\.[0-9]+)*/
commands:
# auth docker with google registry, setup access to kubernetes
- sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update
- sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update kubectl
- echo $GCLOUD_SERVICE_KEY | base64 --decode -i > ~/gcloud-service-key.json # GCLOUD_SERVICE_KEY = base64 <your-service-account.json>
- sudo /opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ~/gcloud-service-key.json
- sudo /opt/google-cloud-sdk/bin/gcloud config set project $GOOGLE_PROJECT_NAME
- sudo /opt/google-cloud-sdk/bin/gcloud config set container/cluster $CLUSTER_NAME
- sudo /opt/google-cloud-sdk/bin/gcloud config set compute/zone $CLOUDSDK_COMPUTE_ZONE
- sudo /opt/google-cloud-sdk/bin/gcloud container clusters get-credentials $CLUSTER_NAME
- cp ~/gcloud-service-key.json ~/.config/gcloud/application_default_credentials.json
# push container into registry, update deployment
- sudo /opt/google-cloud-sdk/bin/gcloud docker push $IMAGE_TAG
- sudo chown -R ubuntu:ubuntu /home/ubuntu/.kube
- kubectl patch --namespace=staging -f deployment.yml -p '{"spec":{"template":{"spec":{"containers":[{"name":"service","image":"'"$IMAGE_TAG"'"}]}}}}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment