stages: - Test - Publish - Deploy image: docker:19.03.1 services: - docker:19.03.1-dind variables: MTD_ACR_BUILD_IMAGE: acrnoeupmtd.azurecr.io/mtdigital/insitedigital.page before_script: - echo "$MTD_ACR_PASSWORD" | docker login acrnoeupmtd.azurecr.io -u $MTD_ACR_LOGIN --password-stdin test-with-pre-merge: stage: Test only: - merge_requests before_script: - apk update && apk add git - git config user.email "you@example.com" - git config user.name "Your Name" - git fetch - git checkout origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME - git merge origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME --no-commit --no-ff - echo "$MTD_ACR_PASSWORD" | docker login acrnoeupmtd.azurecr.io -u $MTD_ACR_LOGIN --password-stdin script: - cat $ENV_TEST > webpack.env.prod.js - docker pull $MTD_ACR_BUILD_IMAGE:latest || true - docker build --cache-from $MTD_ACR_BUILD_IMAGE:latest --tag $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test --target test --build-arg NPM_TOKEN=$NPM_TOKEN -f Dockerfile-Test . - docker push $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/' test: stage: Test only: - development - /^release\/\d+\.\d+\.\d+$/ - /^hotfix\/\d+\.\d+\.\d+$/ - master script: - cat $ENV_TEST > webpack.env.prod.js - docker pull $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test || true - docker build --cache-from $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test --tag $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test --target test --build-arg NPM_TOKEN=$NPM_TOKEN -f Dockerfile-Test . - docker push $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/' publish-to-test: stage: Publish except: - schedules only: - development - merge_requests script: - '[[ $CI_PIPELINE_SOURCE = "merge_request_event" ]] && cat $ENV_VNEXT > webpack.env.prod.js || cat $ENV_TEST > webpack.env.prod.js' - docker pull $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test || true - docker build --cache-from $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA-test --tag $MTD_ACR_BUILD_IMAGE-test:$CI_COMMIT_SHA --tag $MTD_ACR_BUILD_IMAGE-test:latest --target final --build-arg NPM_TOKEN=$NPM_TOKEN -f Dockerfile-Final . - docker push $MTD_ACR_BUILD_IMAGE-test:$CI_COMMIT_SHA - docker push $MTD_ACR_BUILD_IMAGE-test:latest when: on_success publish-to-stage: stage: Publish except: - schedules only: - /^release\/\d+\.\d+\.\d+$/ - /^hotfix\/\d+\.\d+\.\d+$/ script: - cat $ENV_STAGE > webpack.env.prod.js - docker pull $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA || true - docker build --cache-from $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA --tag $MTD_ACR_BUILD_IMAGE-stage:$CI_COMMIT_SHA --tag $MTD_ACR_BUILD_IMAGE-stage:latest --target final --build-arg NPM_TOKEN=$NPM_TOKEN -f Dockerfile-Final . - docker push $MTD_ACR_BUILD_IMAGE-stage:$CI_COMMIT_SHA - docker push $MTD_ACR_BUILD_IMAGE-stage:latest when: on_success publish-to-prod: stage: Publish except: - schedules only: - master script: - cat $ENV_PROD > webpack.env.prod.js - docker pull $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA || true - docker build --cache-from $MTD_ACR_BUILD_IMAGE:$CI_COMMIT_SHA --tag $MTD_ACR_BUILD_IMAGE-prod:$CI_COMMIT_SHA --tag $MTD_ACR_BUILD_IMAGE-prod:latest --target final --build-arg NPM_TOKEN=$NPM_TOKEN -f Dockerfile-Final . - docker push $MTD_ACR_BUILD_IMAGE-prod:$CI_COMMIT_SHA - docker push $MTD_ACR_BUILD_IMAGE-prod:latest when: on_success .deploy: stage: Deploy except: - schedules before_script: - apk add bash - apk add curl - apk add openssl - curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 - chmod 700 get_helm.sh - ./get_helm.sh deploy-to-test: extends: .deploy only: - development variables: ENV: test RELEASE: insitedigital-page-$ENV HOST: $ENV.insitedigital.net WHITELIST: 0.0.0.0/0 script: - helm upgrade $RELEASE helm/insitedigital-page --kube-context aks-t-mtd-01 --timeout 240s --wait --namespace default --install --recreate-pods --set environment=Test --set imageTag=$MTD_ACR_BUILD_IMAGE-test:$CI_COMMIT_SHA --set ingress.host=$HOST --set ingress.whitelist=$WHITELIST --set service.name=insite-digital-webiste environment: name: Test url: https://$ENV.insitedigital.net when: on_success deploy-to-stage: extends: .deploy only: - /^release\/\d+\.\d+\.\d+$/ - /^hotfix\/\d+\.\d+\.\d+$/ variables: ENV: stage RELEASE: insitedigital-page-$ENV HOST: $ENV.insitedigital.net WHITELIST: 0.0.0.0/0 script: - helm upgrade $RELEASE helm/insitedigital-page --kube-context aks-p-mtd-01 --timeout 240s --wait --namespace stage --install --recreate-pods --set environment=Staging --set imageTag=$MTD_ACR_BUILD_IMAGE-stage:$CI_COMMIT_SHA --set ingress.host=$HOST --set ingress.whitelist=$WHITELIST --set service.name=insite-digital-webiste environment: name: Staging url: https://$ENV.insitedigital.net when: manual deploy-to-prod: extends: .deploy only: - master variables: ENV: prod RELEASE: insitedigital-page-$ENV HOST: insitedigital.net WHITELIST: 0.0.0.0/0 script: - helm upgrade $RELEASE helm/insitedigital-page --kube-context aks-p-mtd-01 --timeout 240s --wait --namespace default --install --recreate-pods --set environment=Production --set imageTag=$MTD_ACR_BUILD_IMAGE-prod:$CI_COMMIT_SHA --set ingress.host=$HOST --set ingress.whitelist=$WHITELIST --set service.name=insite-digital-webiste environment: name: Production url: https://insitedigital.net when: manual allow_failure: false deploy-feature-to-vnext: extends: .deploy stage: Deploy except: - development - /^release\/\d+\.\d+\.\d+$/ - /^hotfix\/\d+\.\d+\.\d+$/ - master variables: ENV: vnext RELEASE: insitedigital-page-$ENV HOST: $ENV.insitedigital.net WHITELIST: 0.0.0.0/0 script: - echo "$MTD_ACR_PASSWORD" | docker login acrnoeupmtd.azurecr.io -u $MTD_ACR_LOGIN --password-stdin - cat $ENV_VNEXT > webpack.env.prod.js - docker pull $MTD_ACR_BUILD_IMAGE-vnext:latest || true - docker build --cache-from $MTD_ACR_BUILD_IMAGE-vnext:latest --tag $MTD_ACR_BUILD_IMAGE-vnext:$CI_COMMIT_SHA --tag $MTD_ACR_BUILD_IMAGE-vnext:latest --target final --build-arg NPM_TOKEN=$NPM_TOKEN -f Dockerfile-Final . - docker push $MTD_ACR_BUILD_IMAGE-vnext:$CI_COMMIT_SHA - docker push $MTD_ACR_BUILD_IMAGE-vnext:latest - helm upgrade $RELEASE helm/insitedigital-page --kube-context aks-t-mtd-01 --timeout 240s --wait --namespace default --install --recreate-pods --set environment=Test --set imageTag=$MTD_ACR_BUILD_IMAGE-vnext:$CI_COMMIT_SHA --set ingress.host=$HOST --set ingress.whitelist=$WHITELIST --set service.name=insite-digital-webiste-vnext environment: name: Test url: https://$ENV.insitedigital.net when: manual deploy-merge-to-vnext: extends: .deploy stage: Deploy only: - merge_requests variables: ENV: vnext RELEASE: insitedigital-page-$ENV HOST: $ENV.insitedigital.net WHITELIST: 0.0.0.0/0 script: - helm upgrade $RELEASE helm/insitedigital-page --kube-context aks-t-mtd-01 --timeout 240s --wait --namespace default --install --recreate-pods --set environment=Test --set imageTag=$MTD_ACR_BUILD_IMAGE-test:$CI_COMMIT_SHA --set ingress.host=$HOST --set ingress.whitelist=$WHITELIST --set service.name=insite-digital-webiste-vnext environment: name: Test url: https://$ENV.insitedigital.net when: manual