This repository has been archived by the owner on Feb 22, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 74
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #154 from Mahboobeh-binary/new-release-infra
update release proc
- Loading branch information
Showing
1 changed file
with
65 additions
and
44 deletions.
There are no files selected for viewing
This file contains 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
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" | ||
|
@@ -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 | ||
|
@@ -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: | ||
|
@@ -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 |