diff --git a/includes/verify.yml b/includes/verify.yml new file mode 100644 index 0000000000000000000000000000000000000000..a781b06455927a0fc275de49d4678d13b7128e07 --- /dev/null +++ b/includes/verify.yml @@ -0,0 +1,75 @@ +.checkBuildId: &checkBuildId | + buildIdMatches () { + result=$(curl -sI $CI_ENVIRONMENT_URL | awk -v FS=": " '/^x-build-id/{print $2}') + if [[ "${result//[$' \t\n\r']/}" == "${BUILD_ID//[$' \t\n\r']/}" ]]; then return 0; fi + echo "expected $BUILD_ID, received: $result" + return 1 + } + + statusIs200 () { + statusCode=$(curl --write-out '%{http_code}' --silent --output /dev/null $CI_ENVIRONMENT_URL) + if [[ "$statusCode" == "200" ]]; then return 0; fi + echo "statuscode is $statusCode" + return 1 + } + + max_retry=100 + counter=0 + echo "check if new version has been deployed successfully" + until (buildIdMatches && statusIs200) + do + sleep 1 + [[ counter -eq $max_retry ]] && echo "Failed!"" && exit 1 + echo "Trying again. Try #$counter / $max_retry" + ((counter++)) + done + echo "success!" + +.verify-base: + before_script: + - set +e # Disable exit on error + - *checkBuildId + - set -e # Enable exit on error + + extends: + - .retry-default + stage: verify + +.verify-review: + stage: verify + extends: + - .verify-base + - .env-review + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + needs: ["review-deploy", "setup-build-info"] + +.verify-dev: + stage: verify + extends: + - .verify-base + - .env-dev + needs: ["dev-deploy", "setup-build-info"] + rules: + - if: $CI_COMMIT_TAG # after releases + - if: $CI_COMMIT_MESSAGE =~ /^chore\(release\).*/ # not after semantic release commit + when: never + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + +.verify-stage: + stage: verify + extends: + - .verify-base + - .env-stage + needs: ["stage-deploy", "setup-build-info"] + rules: + - if: $STAGING_ENABLED == "true" && $CI_COMMIT_TAG + +.verify-prod: + stage: verify + extends: + - .verify-base + - .env-prod + needs: ["prod-deploy", "setup-build-info"] + rules: + - if: $CI_COMMIT_TAG diff --git a/panter-kubernetes-base.yml b/panter-kubernetes-base.yml index c0b4a7596f2093635ee5ab21c660c1d7cc66a9fe..0fb3f17cbea3dec0f25d70b952b8c81c2b014d02 100644 --- a/panter-kubernetes-base.yml +++ b/panter-kubernetes-base.yml @@ -4,6 +4,7 @@ include: - /includes/cache.yml - /includes/rules.yml - /includes/setup.yml + - /includes/verify.yml - /includes/docker-build.yml - /includes/semantic-release.yml - /includes/kubernetes.yml @@ -151,50 +152,6 @@ image: panterch/docker-ci-kubernetes-deploy - .rules-prod-deploy - .deploy-to-kubernetes-prod -.verify-base: - extends: - - .retry-default - stage: verify - -.verify-review: - stage: verify - extends: - - .verify-base - - .env-review - rules: - - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - needs: ["review-deploy"] - -.verify-dev: - stage: verify - extends: - - .verify-base - - .env-dev - needs: ["dev-deploy"] - rules: - - if: $CI_COMMIT_TAG # after releases - - if: $CI_COMMIT_MESSAGE =~ /^chore\(release\).*/ # not after semantic release commit - when: never - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - -.verify-stage: - stage: verify - extends: - - .verify-base - - .env-stage - needs: ["stage-deploy"] - rules: - - if: $STAGING_ENABLED == "true" && $CI_COMMIT_TAG - -.verify-prod: - stage: verify - extends: - - .verify-base - - .env-prod - needs: ["prod-deploy"] - rules: - - if: $CI_COMMIT_TAG - #---------------------- # DEFAULT STAGE DEFINITIONS #----------------------