Skip to content
This repository has been archived by the owner on Feb 22, 2024. It is now read-only.

Commit

Permalink
Merge pull request #154 from Mahboobeh-binary/new-release-infra
Browse files Browse the repository at this point in the history
update release proc
  • Loading branch information
sysadmin-frontend-binary authored Jul 6, 2020
2 parents 02667d8 + 9cdb214 commit 9df1a7c
Showing 1 changed file with 65 additions and 44 deletions.
109 changes: 65 additions & 44 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
version: 2.1
orbs:
k8s: circleci/[email protected]
s3: circleci/[email protected]
slack: circleci/[email protected]
commands:
git_checkout_from_cache:
description: "Git checkout and save cache"
Expand Down Expand Up @@ -47,48 +47,37 @@ commands:
key: npm-v1-{{ checksum "package.json" }}
paths:
- "node_modules"

build:
description: "Build"
steps:
- run:
name: "yarn build"
command: yarn build

compress:
description: "Compress"
deploy:
description: "Deploy to static branches"
parameters:
target_branch:
type: string
steps:
- checkout
- attach_workspace:
at: lib
- run:
name: Tag build
command: echo "<< parameters.target_branch >> $(date -u +'%Y-%m-%dT%H:%M:%SZ')" > lib/version
- run:
name: "Compress"
name: Install and configure dependencies
command: |
pushd lib/
tar -cvf artifact.tar *
mv artifact.tar ${OLDPWD}/
sudo npm install -g [email protected]
git config user.email "[email protected]"
git config user.name "ci-build"
- add_ssh_keys:
fingerprints:
- "01:67:4a:6d:26:9c:70:c4:1a:60:91:88:d9:dd:f0:83"
- run:
name: "Tag commit id as artifact identifer"
command: echo "${CIRCLE_SHA1}" > artifact-info.txt

upload_artifact:
description: "upload build artifact to s3 bucket"
steps:
- s3/copy:
from: artifact.tar
to: 's3://${CONTEXT_ARTIFACT_S3_BUCKET}/${CIRCLE_PROJECT_REPONAME}/'
aws-access-key-id: env_CONTEXT_ARTIFACT_S3_AWS_ACCESS_KEY_ID
aws-secret-access-key: env_CONTEXT_ARTIFACT_S3_AWS_SECRET_ACCESS_KEY
aws-region: env_CONTEXT_ARTIFACT_S3_AWS_REGION
arguments: '--metadata "{\"x-amz-artifact-id\": \"${CIRCLE_SHA1}\" }"'

upload_checksum:
description: "upload artifact checksum to s3"
steps:
- s3/copy:
from: artifact-info.txt
to: 's3://${CONTEXT_ARTIFACT_S3_BUCKET}/${CIRCLE_PROJECT_REPONAME}/'
aws-access-key-id: env_CONTEXT_ARTIFACT_S3_AWS_ACCESS_KEY_ID
aws-secret-access-key: env_CONTEXT_ARTIFACT_S3_AWS_SECRET_ACCESS_KEY
aws-region: env_CONTEXT_ARTIFACT_S3_AWS_REGION
docker:
name: Deploy docs to gh-pages branch
command: gh-pages -d lib --branch << parameters.target_branch >> --message '[skip ci]'
docker_build_push:
description: "Build and Push image to docker hub"
steps:
- setup_remote_docker
Expand All @@ -102,7 +91,6 @@ commands:
echo $DOCKERHUB_PASSWORD | docker login -u $DOCKERHUB_USERNAME --password-stdin
docker push ${DOCKHUB_ORGANISATION}/binary-static-liveapi:${CIRCLE_SHA1}
docker push ${DOCKHUB_ORGANISATION}/binary-static-liveapi:latest
k8s_deploy:
description: "Deploy to k8s cluster"
steps:
Expand All @@ -125,26 +113,59 @@ commands:
kubectl --server=${KUBE_SERVER} --certificate-authority=ca.crt --token=$SERVICEACCOUNT_TOKEN set image deployment/liveapi-binary-com liveapi-binary-com=${DOCKHUB_ORGANISATION}/binary-static-liveapi:${CIRCLE_SHA1}
fi
done
notify_slack:
description: "Notify slack"
steps:
- slack/status:
include_project_field: false
failure_message: "Release failed for liveapi.binary.com with version *$(cat lib/version)*"
success_message: "Release succeeded for liveapi.binary.com with version *$(cat lib/version)*"
webhook: ${SLACK_WEBHOOK}
jobs:
release:
build:
docker:
- image: circleci/node:8.10.0-stretch
steps:
- git_checkout_from_cache
- npm_install
- build
release_production:
docker:
- image: circleci/node:8.10.0-stretch
steps:
- git_checkout_from_cache
- npm_install
- build
- deploy:
target_branch: "production"
- notify_slack
release_aws_production:
docker:
- image: circleci/node:9.9.0-stretch
steps:
- git_checkout_from_cache
- npm_install
- build
- compress
- upload_artifact # uploading the built code to s3 to create a backup of key services separate from Kubernetes deployment
- upload_checksum # uploading compressed artifact checksum to cross match artifact fingerprint
- docker
- k8s_deploy
- docker_build_push
- k8s_deploy
- notify_slack

workflows:
build:
jobs:
- build
release:
jobs:
- release:
- release_production:
filters:
branches:
ignore: /.*/
tags:
only: /^production.*/
- release_aws_production:
filters:
branches:
only: /^master$/
context: binary-frontend-artifact-upload # using context to retrieve shared secret from circle ci
ignore: /.*/
tags:
only: /^production.*/
context: binary-frontend-artifact-upload

0 comments on commit 9df1a7c

Please sign in to comment.