|
| 1 | +image: docker:latest |
| 2 | +# |
| 3 | +services: |
| 4 | + - docker:dind |
| 5 | + |
| 6 | +variables: |
| 7 | +# # see https://gitlab.com/gitlab-org/gitlab-ce/issues/17861#note_12991518 |
| 8 | + DOCKER_DRIVER: overlay |
| 9 | + |
| 10 | +stages: |
| 11 | + - build |
| 12 | + - test |
| 13 | + - deploy |
| 14 | + |
| 15 | +variables: |
| 16 | + HEROKU_USER_NAME: _ |
| 17 | + HEROKU_REGISTRY: registry.heroku.com |
| 18 | + |
| 19 | +build-verify: |
| 20 | + image: docker:latest |
| 21 | + stage: build |
| 22 | + before_script: |
| 23 | + - apk add --no-cache py-pip |
| 24 | + - pip install docker-compose |
| 25 | + - docker-compose --version |
| 26 | + # convert / to -, remove # character from docker tag name to make it a valid name |
| 27 | + - export IMG_TAG=`if [ "$CI_BUILD_REF_NAME" == "master" ]; then echo "latest"; else echo $CI_BUILD_REF_NAME | sed -e 's/[\/]/-/g' | sed -e 's/[\#]//g'; fi` |
| 28 | + - export DOCKER_IMAGE_PROD=$CI_REGISTRY_IMAGE:$IMG_TAG |
| 29 | + - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY |
| 30 | + - export CI_BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") |
| 31 | + script: |
| 32 | + # build |
| 33 | + - docker-compose -f docker-compose.prod.yml build --pull prod |
| 34 | + - docker push $DOCKER_IMAGE_PROD |
| 35 | + |
| 36 | +deploy-gcp-staging: |
| 37 | + image: teracy/google-cloud-sdk |
| 38 | + stage: deploy |
| 39 | + before_script: |
| 40 | + # convert / to -, remove # character from docker tag name to make it a valid name |
| 41 | + - export IMG_TAG=`if [ "$CI_BUILD_REF_NAME" == "master" ]; then echo "latest"; else echo $CI_BUILD_REF_NAME | sed -e 's/[\/]/-/g' | sed -e 's/[\#]//g'; fi` |
| 42 | + - export DOCKER_IMAGE_PROD=$CI_REGISTRY_IMAGE:$IMG_TAG |
| 43 | + - export GCP_ACCOUNT=$GCP_ACCOUNT_STAGING |
| 44 | + - export GCP_PROJECT_ID=$GCP_PROJECT_ID_STAGING |
| 45 | + - export GCP_ZONE=$GCP_ZONE_STAGING |
| 46 | + - export GCP_CLUSTER_NAME=$GCP_CLUSTER_NAME_STAGING |
| 47 | + - export HELM_RELEASE_NAME=$IMG_TAG-${HELM_PROJECT_NAMESPACE:-$CI_PROJECT_NAMESPACE}-nhw |
| 48 | + - export HELM_CHART=helm-charts/nodejs-hello-world |
| 49 | + - export HELM_IMAGE_REPOSITORY=$CI_REGISTRY_IMAGE |
| 50 | + - export HELM_IMAGE_TAG=$IMG_TAG |
| 51 | + - export HELM_IMAGE_PULL_POLICY=Always |
| 52 | + - export HELM_IMAGE_LAST_DEPLOYED=$(date -u +"%Y-%m-%dT%H:%M:%SZ") |
| 53 | + #- docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY |
| 54 | + - echo $GCP_KEY_FILE_STAGING | base64 --decode > /tmp/gcp_key_file.json |
| 55 | + script: |
| 56 | + - sh scripts/setup_gcp.sh |
| 57 | + - sh scripts/deploy_gcp.sh |
| 58 | + after_script: |
| 59 | + - rm /tmp/gcp_key_file.json |
| 60 | + environment: staging |
| 61 | + only: |
| 62 | + - develop |
| 63 | + allow_failure: true # for downstream failure |
| 64 | + when: on_success |
| 65 | + |
| 66 | + |
| 67 | +deploy-gcp-prod: |
| 68 | + image: teracy/google-cloud-sdk |
| 69 | + stage: deploy |
| 70 | + before_script: |
| 71 | + # convert / to -, remove # character from docker tag name to make it a valid name |
| 72 | + - export IMG_TAG=`if [ "$CI_BUILD_REF_NAME" == "master" ]; then echo "latest"; else echo $CI_BUILD_REF_NAME | sed -e 's/[\/]/-/g' | sed -e 's/[\#]//g'; fi` |
| 73 | + - export DOCKER_IMAGE_PROD=$CI_REGISTRY_IMAGE:$IMG_TAG |
| 74 | + - export GCP_ACCOUNT=$GCP_ACCOUNT_PROD |
| 75 | + - export GCP_PROJECT_ID=$GCP_PROJECT_ID_PROD |
| 76 | + - export GCP_ZONE=$GCP_ZONE_PROD |
| 77 | + - export GCP_CLUSTER_NAME=$GCP_CLUSTER_NAME_PROD |
| 78 | + - export HELM_RELEASE_NAME=$IMG_TAG-${HELM_PROJECT_NAMESPACE:-$CI_PROJECT_NAMESPACE}-nhw |
| 79 | + - export HELM_CHART=helm-charts/nodejs-hello-world |
| 80 | + - export HELM_IMAGE_REPOSITORY=$CI_REGISTRY_IMAGE |
| 81 | + - export HELM_IMAGE_TAG=$IMG_TAG |
| 82 | + - export HELM_IMAGE_PULL_POLICY=Always |
| 83 | + - export HELM_IMAGE_LAST_DEPLOYED=$(date -u +"%Y-%m-%dT%H:%M:%SZ") |
| 84 | + #- docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY |
| 85 | + - echo $GCP_KEY_FILE_PROD | base64 --decode > /tmp/gcp_key_file.json |
| 86 | + script: |
| 87 | + - sh scripts/setup_gcp.sh |
| 88 | + - sh scripts/deploy_gcp.sh |
| 89 | + after_script: |
| 90 | + - rm /tmp/gcp_key_file.json |
| 91 | + environment: prod |
| 92 | + only: |
| 93 | + - master |
| 94 | + allow_failure: true # for downstream failure |
| 95 | + when: on_success |
| 96 | + |
| 97 | + |
| 98 | +deploy-heroku-staging: |
| 99 | + stage: deploy |
| 100 | + before_script: |
| 101 | + # convert / to -, remove # character from docker tag name to make it a valid name |
| 102 | + - export IMG_TAG=`if [ "$CI_BUILD_REF_NAME" == "master" ]; then echo "latest"; else echo $CI_BUILD_REF_NAME | sed -e 's/[\/]/-/g' | sed -e 's/[\#]//g'; fi` |
| 103 | + - export DOCKER_IMAGE=$CI_REGISTRY_IMAGE:$IMG_TAG |
| 104 | + - export HEROKU_IMAGE=$HEROKU_REGISTRY/$HEROKU_APP_NAME_STAGING/web |
| 105 | + - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY |
| 106 | + script: |
| 107 | + - echo "login into Heroku Docker registry" |
| 108 | + - docker login -u "$HEROKU_USER_NAME" -p "$HEROKU_API_KEY_STAGING" $HEROKU_REGISTRY |
| 109 | + - sh scripts/deploy_heroku.sh |
| 110 | + environment: staging |
| 111 | + only: |
| 112 | + - develop |
| 113 | + allow_failure: true # for downstream failure |
| 114 | + when: on_success |
| 115 | + |
| 116 | +deploy-heroku-prod: |
| 117 | + stage: deploy |
| 118 | + before_script: |
| 119 | + # convert / to -, remove # character from docker tag name to make it a valid name |
| 120 | + - export IMG_TAG=`if [ "$CI_BUILD_REF_NAME" == "master" ]; then echo "latest"; else echo $CI_BUILD_REF_NAME | sed -e 's/[\/]/-/g' | sed -e 's/[\#]//g'; fi` |
| 121 | + - export DOCKER_IMAGE=$CI_REGISTRY_IMAGE:$IMG_TAG |
| 122 | + - export HEROKU_IMAGE=$HEROKU_REGISTRY/$HEROKU_APP_NAME_PROD/web |
| 123 | + - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY |
| 124 | + script: |
| 125 | + - docker login -u "$HEROKU_USER_NAME" -p "$HEROKU_API_KEY_PROD" $HEROKU_REGISTRY |
| 126 | + - sh scripts/deploy_heroku.sh |
| 127 | + environment: prod |
| 128 | + only: |
| 129 | + - master |
| 130 | + allow_failure: true # for downstream failure |
| 131 | + when: on_success |
0 commit comments