Skip to content

Instantly share code, notes, and snippets.

@paulsheldrake
Forked from sfgov-mikela/circle.yaml
Last active September 17, 2024 18:09
Show Gist options
  • Save paulsheldrake/5ca90c46b2a0a7e1229ab4e45c87b2cb to your computer and use it in GitHub Desktop.
Save paulsheldrake/5ca90c46b2a0a7e1229ab4e45c87b2cb to your computer and use it in GitHub Desktop.
SF Gov AWX Drupal deployment CircleCI config
# Set this environment variable using the Circle CI admin
# TOWER_OAUTH_TOKEN="<access token value>"
SLACK_WEBHOOK: &SLACK_WEBHOOK "https://hooks.slack.com/services/123/XXX/YYY"
BRANCH_PROD: &BRANCH_PROD "main"
BRANCH_STAGE: &BRANCH_STAGE "staging"
BRANCH_DEV: &BRANCH_DEV "dev"
SSH_HOST_PROD: &SSH_HOST_PROD "123.123.123.123"
SSH_HOST_STAGE: &SSH_HOST_STAGE "123.123.123.123"
SSH_HOST_DEV: &SSH_HOST_DEV "123.123.123.123"
AWX_DEPLOY_ID_PROD: &AWX_DEPLOY_ID_PROD "123"
AWX_DEPLOY_ID_STAGE: &AWX_DEPLOY_ID_STAGE "123"
AWX_DEPLOY_ID_DEV: &AWX_DEPLOY_ID_DEV "123"
orbs:
slack: circleci/slack@3.4.2
version: 2.1
jobs:
deploy_to_aws:
docker:
- image: continuumio/miniconda3
environment:
TOWER_HOST: "awx.api.sf.gov"
BRANCH_PROD: *BRANCH_PROD
BRANCH_STAGE: *BRANCH_STAGE
BRANCH_DEV: *BRANCH_DEV
AWX_DEPLOY_ID_PROD: *AWX_DEPLOY_ID_PROD
AWX_DEPLOY_ID_STAGE: *AWX_DEPLOY_ID_STAGE
AWX_DEPLOY_ID_DEV: *AWX_DEPLOY_ID_DEV
steps:
- run:
command: |
declare -A branch_to_job=( ["$BRANCH_PROD"]="$AWX_DEPLOY_ID_PROD" ["$BRANCH_STAGE"]="$AWX_DEPLOY_ID_STAGE" ["$BRANCH_DEV"]="$AWX_DEPLOY_ID_DEV")
JOB_ID=${branch_to_job[${CIRCLE_BRANCH}]}
echo $JOB_ID
pip install ansible-tower-cli
tower-cli job launch --job-template=$JOB_ID --extra-vars="" --wait --monitor
- slack/status:
fail_only: true
failure_message: "Issue with AWS deploy"
include_job_number_field: false
include_project_field: false
webhook: *SLACK_WEBHOOK
drupal_post_deploy:
docker:
- image: cimg/base:current
environment:
TOWER_HOST: "awx.api.sf.gov"
BRANCH_PROD: *BRANCH_PROD
BRANCH_STAGE: *BRANCH_STAGE
BRANCH_DEV: *BRANCH_DEV
SSH_HOST_PROD: *SSH_HOST_PROD
SSH_HOST_STAGE: *SSH_HOST_STAGE
SSH_HOST_DEV: *SSH_HOST_DEV
steps:
- run:
name: SSH host checking
command: |
mkdir $HOME/.ssh || true
echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- run:
name: Drupal post code deploy config steps
command: |
DRUSH_SYMLINK="sudo rm -f /usr/local/bin/drush && sudo ln -sf /home/ubuntu/srv/sfgov/vendor/bin/drush /usr/local/bin/drush"
DRUPAL_SSH_COMMAND="cd /home/ubuntu/srv/sfgov/web/ && drush cr && drush cim -y && drush updb -y && drush cr"
echo $DRUPAL_SSH_COMMAND
if [ "${CIRCLE_BRANCH}" == "$BRANCH_PROD" ]; then
echo "Symlink drush"
ssh ubuntu@$SSH_HOST_PROD "$DRUSH_SYMLINK"
echo "Run drush on Prod"
ssh ubuntu@$SSH_HOST_PROD "$DRUPAL_SSH_COMMAND"
fi
if [ "${CIRCLE_BRANCH}" == "$BRANCH_STAGE" ]; then
echo "Symlink drush"
ssh ubuntu@$SSH_HOST_STAGE "$DRUSH_SYMLINK"
echo "Run drush on Stage"
ssh ubuntu@$SSH_HOST_STAGE "$DRUPAL_SSH_COMMAND"
fi
if [ "${CIRCLE_BRANCH}" == "$BRANCH_DEV" ]; then
echo "Symlink drush"
ssh ubuntu@$SSH_HOST_DEV "$DRUSH_SYMLINK"
echo "Run drush on Dev"
ssh ubuntu@$SSH_HOST_DEV "$DRUPAL_SSH_COMMAND"
fi
- slack/status:
fail_only: true
failure_message: "Issue with Drush commands"
include_job_number_field: false
include_project_field: false
webhook: *SLACK_WEBHOOK
notify_prod:
docker:
- image: cimg/base:current
steps:
- slack/notify:
message: "Deploy to PROD complete: https://www.sfsheriff.com/"
include_job_number_field: false
include_project_field: false
webhook: *SLACK_WEBHOOK
notify_stage:
docker:
- image: cimg/base:current
steps:
- slack/notify:
message: "Deploy to STAGE complete: https://sfsd-staging.sfgov.dev.sf.gov"
include_job_number_field: false
include_project_field: false
webhook: *SLACK_WEBHOOK
notify_dev:
docker:
- image: cimg/base:current
steps:
- slack/notify:
message: "Deploy to DEV complete: https://sfsd.sfgov.dev.sf.gov"
include_job_number_field: false
include_project_field: false
webhook: *SLACK_WEBHOOK
workflows:
awx_deploy_prod:
when:
and:
- equal: [ *BRANCH_PROD, << pipeline.git.branch >> ]
jobs:
- deploy_to_aws
- drupal_post_deploy:
requires:
- deploy_to_aws
- notify_prod:
requires:
- drupal_post_deploy
awx_deploy_stage:
when:
and:
- equal: [ *BRANCH_STAGE, << pipeline.git.branch >> ]
jobs:
- deploy_to_aws
- drupal_post_deploy:
requires:
- deploy_to_aws
- notify_stage:
requires:
- drupal_post_deploy
awx_deploy_dev:
when:
and:
- equal: [ *BRANCH_DEV, << pipeline.git.branch >> ]
jobs:
- deploy_to_aws
- drupal_post_deploy:
requires:
- deploy_to_aws
- notify_dev:
requires:
- drupal_post_deploy
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment