Skip to content

Instantly share code, notes, and snippets.

@kalda341
Created March 3, 2020 23:54
Show Gist options
  • Select an option

  • Save kalda341/6694c0612e3fd7c3824c15d9b6f5c619 to your computer and use it in GitHub Desktop.

Select an option

Save kalda341/6694c0612e3fd7c3824c15d9b6f5c619 to your computer and use it in GitHub Desktop.
stages:
- test
- build
- deploy
variables:
AWS_DEFAULT_REGION: ap-southeast-2
# Environment specific variables
PROD_ACCOUNT: 596868952451
PROD_CLUSTER: BackendCluster-Cluster-1JUMJDIGSV8TB
DEV_ACCOUNT: 696160046471
DEV_CLUSTER: BackendCluster-Cluster-7NQZGP1N1T3F
BUGSNAG_UI_API_KEY: 89aab509e0c1ca3c778bcaec7fb7a9d4
.ui:
image: node:13.8.0
cache:
key: ui-cache
paths:
- ui/node_modules
- ui/.parcel-cache
before_script:
- cd ui
- yarn
lint:ui:js:
stage: test
extends: .ui
script:
- yarn lint
test:ui:
stage: test
extends: .ui
script:
- yarn test
build:ui:dev:
stage: build
extends: .ui
script:
- export REACT_APP_API_PROTOCOL=https
- export REACT_APP_API_HOST=api.dev.rico.nz
- export REACT_APP_BUGSNAG_API_KEY=$BUGSNAG_UI_API_KEY
- export REACT_APP_ENV=dev
- yarn build
- mv dist build-dev
artifacts:
paths:
- ui/build-dev
build:ui:prod:
stage: build
extends: .ui
script:
- export REACT_APP_API_PROTOCOL=https
- export REACT_APP_API_HOST=api.rico.nz
- export REACT_APP_BUGSNAG_API_KEY=$BUGSNAG_UI_API_KEY
- export REACT_APP_ENV=prod
- yarn build
- mv dist build-prod
artifacts:
paths:
- ui/build-prod
.deploy:ui:
stage: deploy
image: mikesir87/aws-cli:1.16.275
script:
- aws s3 sync "$BUILD_DIR" "s3://$BUCKET_NAME" --cache-control "max-age=500" --delete --acl public-read
deploy:ui:dev:
extends: .deploy:ui
when: manual
before_script:
- export AWS_ACCESS_KEY_ID=$DEV_UI_AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$DEV_UI_AWS_SECRET_ACCESS_KEY
- export BUCKET_NAME=$DEV_UI_BUCKET_NAME
- export BUILD_DIR=build-dev
- cd ui
deploy:ui:prod:
extends: .deploy:ui
only:
refs:
- master
before_script:
- export AWS_ACCESS_KEY_ID=$PROD_UI_AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$PROD_UI_AWS_SECRET_ACCESS_KEY
- export BUCKET_NAME=$PROD_UI_BUCKET_NAME
- export BUILD_DIR=build-prod
- cd ui
.api:
image: kalda341/rico-api-base:1.2
cache:
key:
prefix: api-cache-poetry
files:
- api/poetry.lock
paths:
- api/.pypoetry/virtualenvs
before_script:
- cd api
# Cache only works within project directory
- poetry config virtualenvs.path "$(pwd)/.pypoetry/virtualenvs"
- poetry install
lint:api:
stage: test
extends: .api
script:
- poetry run black . --check --exclude "\.pypoetry"
test:api:
stage: test
extends: .api
services:
- name: postgres:11
alias: api-db
- name: andrewgaul/s3proxy
alias: api-s3
variables:
# For db service to automatically create the required DB
POSTGRES_DB: django
POSTGRES_PASSWORD: postgres
# S3 Proxy config
S3PROXY_AUTHORIZATION: none
S3PROXY_CORS_ALLOW_ALL: "true"
S3PROXY_IDENTITY: local-identity
S3PROXY_CREDENTIAL: local-credential
# Configure Django API to use posgres
DJANGO_DB_NAME: django
DJANGO_DB_USER: postgres
DJANGO_DB_PASSWORD: postgres
DJANGO_DB_HOST: api-db
DJANGO_DB_PORT: 5432
# Configure Django to use S3 Proxy
DJANGO_AWS_STORAGE_BUCKET_NAME: bucket
DJANGO_AWS_S3_ENDPOINT_URL: http://api-s3:80
AWS_ACCESS_KEY_ID: local-identity
AWS_SECRET_ACCESS_KEY: local-credential
script:
- poetry run pytest --cov=rico .
build:api:
stage: build
image: kalda341/dind-awscli:1.0.0
before_script:
- export ECR_REPO=588396343768.dkr.ecr.ap-southeast-2.amazonaws.com/ricobackendrepository
- export ECR_IMAGE_TAG=$ECR_REPO:$CI_COMMIT_SHA
- export ECR_LATEST_IMAGE_TAG=$ECR_REPO:latest
- cd api
script:
- docker build . -t $ECR_IMAGE_TAG
- (if [[ $CI_COMMIT_REF_NAME == 'master' ]]; then docker tag $ECR_IMAGE_TAG $ECR_LATEST_IMAGE_TAG; fi)
- export AWS_ACCESS_KEY_ID=$API_IMAGE_AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$API_IMAGE_AWS_SECRET_ACCESS_KEY
- $(aws ecr get-login --no-include-email)
- docker push $ECR_IMAGE_TAG
- (if [[ $CI_COMMIT_REF_NAME == 'master' ]]; then docker push $ECR_LATEST_IMAGE_TAG; fi)
.deploy:api:
stage: deploy
image:
name: kalda341/ecs-deploy
entrypoint: ['']
script:
- export ECR_REPO=588396343768.dkr.ecr.ap-southeast-2.amazonaws.com/ricobackendrepository
- export ECR_IMAGE_TAG=$ECR_REPO:$CI_COMMIT_SHA
- export SERVICE=arn:aws:ecs:$AWS_DEFAULT_REGION:$DEPLOY_ACCOUNT:service/RicoAPI
- echo /ecs-deploy -c $DEPLOY_CLUSTER -n $SERVICE -i $ECR_IMAGE_TAG -a $DEPLOYMENT_ROLE --timeout 600
- /ecs-deploy -c $DEPLOY_CLUSTER -n $SERVICE -i $ECR_IMAGE_TAG -a $DEPLOYMENT_ROLE --timeout 600
deploy:api:dev:
extends: .deploy:api
when: manual
before_script:
- export AWS_ACCESS_KEY_ID=$DEV_API_DEPLOY_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$DEV_API_DEPLOY_SECRET_ACCESS_KEY
- export DEPLOY_ACCOUNT=$DEV_ACCOUNT
- export DEPLOY_CLUSTER=$DEV_CLUSTER
- export DEPLOYMENT_ROLE=arn:aws:iam::696160046471:role/BackendCluster-APIDeploymentRole-AQ4LGLAMXDAQ
deploy:api:prod:
extends: .deploy:api
only:
refs:
- master
before_script:
- export AWS_ACCESS_KEY_ID=$PROD_API_DEPLOY_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$PROD_API_DEPLOY_SECRET_ACCESS_KEY
- export DEPLOY_ACCOUNT=$PROD_ACCOUNT
- export DEPLOY_CLUSTER=$PROD_CLUSTER
- export DEPLOYMENT_ROLE=arn:aws:iam::596868952451:role/BackendCluster-APIDeploymentRole-27RDF6HTE26L
.migrate:api:
stage: deploy
image:
name: kalda341/ecs-deploy
entrypoint: ['']
script:
- export ECR_REPO=588396343768.dkr.ecr.ap-southeast-2.amazonaws.com/ricobackendrepository
- export ECR_IMAGE_TAG=$ECR_REPO:$CI_COMMIT_SHA
- export SERVICE=arn:aws:ecs:$AWS_DEFAULT_REGION:$DEPLOY_ACCOUNT:service/RicoAPI
- export MIGRATION_TASK_DEFINITION=arn:aws:ecs:$AWS_DEFAULT_REGION:$DEPLOY_ACCOUNT:task-definition/RicoAPIMigration
- echo /ecs-deploy -c $DEPLOY_CLUSTER -d $MIGRATION_TASK_DEFINITION -i $ECR_IMAGE_TAG -a $DEPLOYMENT_ROLE --run-task --launch-type FARGATE --mimic-service-network $SERVICE
- /ecs-deploy -c $DEPLOY_CLUSTER -d $MIGRATION_TASK_DEFINITION -i $ECR_IMAGE_TAG -a $DEPLOYMENT_ROLE --run-task --launch-type FARGATE --mimic-service-network $SERVICE
migrate:api:dev:
extends: .migrate:api
when: manual
before_script:
- export AWS_ACCESS_KEY_ID=$DEV_API_DEPLOY_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$DEV_API_DEPLOY_SECRET_ACCESS_KEY
- export DEPLOY_ACCOUNT=$DEV_ACCOUNT
- export DEPLOY_CLUSTER=$DEV_CLUSTER
- export DEPLOYMENT_ROLE=arn:aws:iam::696160046471:role/BackendCluster-APIDeploymentRole-AQ4LGLAMXDAQ
migrate:api:prod:
extends: .migrate:api
only:
- master
before_script:
- export AWS_ACCESS_KEY_ID=$PROD_API_DEPLOY_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$PROD_API_DEPLOY_SECRET_ACCESS_KEY
- export DEPLOY_ACCOUNT=$PROD_ACCOUNT
- export DEPLOY_CLUSTER=$PROD_CLUSTER
- export DEPLOYMENT_ROLE=arn:aws:iam::596868952451:role/BackendCluster-APIDeploymentRole-27RDF6HTE26L
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment