Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Auto rollback with circleci 2.0
## 1) GENERATE AN API TOKEN (https://circleci.com/gh/<gh-user>/<gh-repo-name>/edit#api)
## 2) ADD ENV VAR WITH NAME "CIRCLE_API_TOKEN" WITH PREVIOUS GENERATED TOKEN
version: 2
jobs:
build:
machine: true
steps:
- run:
name: Build App
command: |
URL=http://pruu.herokuapp.com/dump/test-circleci
BODY='{
"step" : "build"
}'
curl -X POST ${URL} -H 'Content-Type: application/json' -d "${BODY}"
unit_test:
machine: true
steps:
- run:
name: Unit Tests
command: |
URL=http://pruu.herokuapp.com/dump/test-circleci
BODY='{
"step" : "unit_test"
}'
curl -X POST ${URL} -H 'Content-Type: application/json' -d "${BODY}"
deploy_production:
machine: true
steps:
- run:
name: Unit Tests
command: |
URL=http://pruu.herokuapp.com/dump/test-circleci
BODY='{
"step" : "deploy_production"
}'
curl -X POST ${URL} -H 'Content-Type: application/json' -d "${BODY}"
integration_test:
machine: true
steps:
- run:
name: Integration Test Command
command: |
URL=WRONG_URL_FOR_SIMULATE_ERROR
BODY='{
"step" : "integration_test"
}'
curl -X POST ${URL} -H 'Content-Type: application/json' -d "${BODY}"
- run:
name: Auto Rollback
command: |
curl --user ${CIRCLE_API_TOKEN}: \
--data build_parameters[CIRCLE_JOB]=deploy_rollback \
--data revision=$CIRCLE_SHA1 \
https://circleci.com/api/v1.1/project/github/${CIRCLE_USERNAME}/$CIRCLE_PROJECT_REPONAME/tree/$CIRCLE_BRANCH
when: on_fail
deploy_commit:
machine: true
steps:
- run:
name: Commit/Finish Deploy
command: |
URL=http://pruu.herokuapp.com/dump/test-circleci
BODY='{
"step" : "deploy_commit"
}'
curl -X POST ${URL} -H 'Content-Type: application/json' -d "${BODY}"
deploy_rollback:
machine: true
steps:
- run:
name: Rollback Deploy
command: |
URL=http://pruu.herokuapp.com/dump/test-circleci
BODY='{
"step" : "deploy_rollback"
}'
curl -X POST ${URL} -H 'Content-Type: application/json' -d "${BODY}"
workflows:
version: 2
build_publish_deploy:
jobs:
- build
- unit_test:
requires:
- build
- hold_deploy:
type: approval
requires:
- unit_test
- deploy_production:
requires:
- hold_deploy
- integration_test:
requires:
- deploy_production
- hold_commit:
type: approval
requires:
- integration_test
- hold_rollback:
type: approval
requires:
- integration_test
- deploy_commit:
requires:
- hold_commit
- deploy_rollback:
requires:
- hold_rollback
@jaswinder97

This comment has been minimized.

Copy link

commented Mar 24, 2019

@ThiagoBarradas could you please add some comments to elaborate each step

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.