Created
March 3, 2020 23:54
-
-
Save kalda341/6694c0612e3fd7c3824c15d9b6f5c619 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| 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