diff --git a/templates/gitlab-ci-helm.yml b/templates/gitlab-ci-helm.yml index 12b543ae2e1aa3cc7f24b277f1a578cf6b4c8fcb..52036edeedff9f7428587121af776b76011d373c 100644 --- a/templates/gitlab-ci-helm.yml +++ b/templates/gitlab-ci-helm.yml @@ -707,14 +707,54 @@ stages: - .cache - .config -.helm-values-lint: +helm-values-lint: extends: .helm-base image: name: $HELM_YAMLLINT_IMAGE entrypoint: [""] stage: test + parallel: + matrix: + - VAR_PREFIX: COMMON + - VAR_PREFIX: REVIEW + - VAR_PREFIX: INTEG + - VAR_PREFIX: STAGING + - VAR_PREFIX: PROD + script: + - values_file=$(eval echo "\$HELM_${VAR_PREFIX}_VALUES") + - awkenvsubst < "$values_file" > generated-values.yml + - yamllint -d "$HELM_YAMLLINT_CONFIG" $HELM_YAMLLINT_ARGS generated-values.yml + rules: + # exclude tags + - if: $CI_COMMIT_TAG + when: never + # exclude when $HELM_YAMLLINT_DISABLED is set + - if: '$HELM_YAMLLINT_DISABLED == "true"' + when: never + # exclude common if $HELM_COMMON_VALUES unset + - if: '$VAR_PREFIX == "COMMON" && ($HELM_COMMON_VALUES == null || $HELM_COMMON_VALUES == "")' + when: never + # exclude review if $HELM_REVIEW_VALUES unset + - if: '$VAR_PREFIX == "REVIEW" && ($HELM_REVIEW_VALUES == null || $HELM_REVIEW_VALUES == "")' + when: never + # exclude review on integration or prod branch + - if: '$VAR_PREFIX == "REVIEW" && ($CI_COMMIT_REF_NAME =~ $INTEG_REF || $CI_COMMIT_REF_NAME =~ $PROD_REF)' + when: never + # exclude integration if $HELM_INTEG_VALUES unset + - if: '$VAR_PREFIX == "INTEG" && ($HELM_INTEG_VALUES == null || $HELM_INTEG_VALUES == "")' + when: never + # exclude integration on prod branch + - if: '$VAR_PREFIX == "INTEG" && $CI_COMMIT_REF_NAME =~ $PROD_REF' + when: never + # exclude staging if $HELM_STAGING_VALUES unset + - if: '$VAR_PREFIX == "STAGING" && ($HELM_STAGING_VALUES == null || $HELM_STAGING_VALUES == "")' + when: never + # exclude production if $HELM_PROD_VALUES unset + - if: '$VAR_PREFIX == "PROD" && ($HELM_PROD_VALUES == null || $HELM_PROD_VALUES == "")' + when: never + - !reference [.test-policy, rules] -.helm-score: +helm-score: extends: .helm-base image: name: $HELM_KUBE_SCORE_IMAGE @@ -736,6 +776,47 @@ stages: log_error "You need at least one Chart.yaml or external deploy chart reference" exit 1 fi + parallel: + matrix: + - ENV_TYPE: review + VAR_PREFIX: REVIEW + - ENV_TYPE: integration + VAR_PREFIX: INTEG + - ENV_TYPE: staging + VAR_PREFIX: STAGING + - ENV_TYPE: production + VAR_PREFIX: PROD + script: + - awkenvsubst < "${HELM_COMMON_VALUES:-/dev/null}" > generated-values-common.yml + - env_values=$(eval echo "\$HELM_${VAR_PREFIX}_VALUES") + - awkenvsubst < "$env_values" > generated-values-env.yml + - helm template $helm_package --values generated-values-common.yml --values generated-values-env.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - + rules: + # exclude tags + - if: $CI_COMMIT_TAG + when: never + # exclude when $HELM_SCORE_DISABLED is set + - if: '$HELM_KUBE_SCORE_DISABLED == "true"' + when: never + # exclude review if $HELM_REVIEW_VALUES unset + - if: '$ENV_TYPE == "review" && ($HELM_REVIEW_VALUES == null || $HELM_REVIEW_VALUES == "")' + when: never + # exclude review on integration or prod branch + - if: '$ENV_TYPE == "review" && ($CI_COMMIT_REF_NAME =~ $INTEG_REF || $CI_COMMIT_REF_NAME =~ $PROD_REF)' + when: never + # exclude integration if $HELM_INTEG_VALUES unset + - if: '$ENV_TYPE == "integration" && ($HELM_INTEG_VALUES == null || $HELM_INTEG_VALUES == "")' + when: never + # exclude integration on prod branch + - if: '$ENV_TYPE == "integration" && $CI_COMMIT_REF_NAME =~ $PROD_REF' + when: never + # exclude staging if $HELM_STAGING_VALUES unset + - if: '$ENV_TYPE == "staging" && ($HELM_STAGING_VALUES == null || $HELM_STAGING_VALUES == "")' + when: never + # exclude production if $HELM_PROD_VALUES unset + - if: '$ENV_TYPE == "production" && ($HELM_PROD_VALUES == null || $HELM_PROD_VALUES == "")' + when: never + - !reference [.test-policy, rules] # ================================================== # Stage: check @@ -757,139 +838,6 @@ helm-lint: - exists: - "**/Chart.yaml" -# yamllint-job is used to check the syntax of the values files. -helm-values-common-lint: - extends: .helm-values-lint - script: - - awkenvsubst < "$HELM_COMMON_VALUES" > generated-values-common.yml - - yamllint -d "$HELM_YAMLLINT_CONFIG" $HELM_YAMLLINT_ARGS generated-values-common.yml - rules: - - if: '$HELM_YAMLLINT_DISABLED == "true"' - when: never - - if: '$HELM_COMMON_VALUES == null || $HELM_COMMON_VALUES == ""' - when: never - - !reference [.test-policy, rules] - -helm-values-review-lint: - extends: .helm-values-lint - script: - - awkenvsubst < "$HELM_REVIEW_VALUES" > generated-values-review.yml - - yamllint -d "$HELM_YAMLLINT_CONFIG" $HELM_YAMLLINT_ARGS generated-values-review.yml - rules: - - if: '$HELM_YAMLLINT_DISABLED == "true"' - when: never - - if: '$HELM_REVIEW_VALUES == null || $HELM_REVIEW_VALUES == ""' - when: never - # only on non-production, non-integration branches - - if: '$CI_COMMIT_REF_NAME =~ $PROD_REF || $CI_COMMIT_REF_NAME =~ $INTEG_REF' - when: never - - !reference [.test-policy, rules] - -helm-values-integration-lint: - extends: .helm-values-lint - script: - - awkenvsubst < "$HELM_INTEG_VALUES" > generated-values-integration.yml - - yamllint -d "$HELM_YAMLLINT_CONFIG" $HELM_YAMLLINT_ARGS generated-values-integration.yml - rules: - - if: '$HELM_YAMLLINT_DISABLED == "true"' - when: never - - if: '$HELM_INTEG_VALUES == null || $HELM_INTEG_VALUES == ""' - when: never - # only on non-production branches - - if: '$CI_COMMIT_REF_NAME =~ $PROD_REF' - when: never - - !reference [.test-policy, rules] - -helm-values-staging-lint: - extends: .helm-values-lint - script: - - awkenvsubst < "$HELM_STAGING_VALUES" > generated-values-staging.yml - - yamllint -d "$HELM_YAMLLINT_CONFIG" $HELM_YAMLLINT_ARGS generated-values-staging.yml - rules: - - if: '$HELM_YAMLLINT_DISABLED == "true"' - when: never - - if: '$HELM_STAGING_VALUES == null || $HELM_STAGING_VALUES == ""' - when: never - - !reference [.test-policy, rules] - -helm-values-prod-lint: - extends: .helm-values-lint - script: - - awkenvsubst < "$HELM_PROD_VALUES" > generated-values-prod.yml - - yamllint -d "$HELM_YAMLLINT_CONFIG" $HELM_YAMLLINT_ARGS generated-values-prod.yml - rules: - - if: '$HELM_YAMLLINT_DISABLED == "true"' - when: never - - if: '$HELM_PROD_VALUES == null || $HELM_PROD_VALUES == ""' - when: never - - !reference [.test-policy, rules] - -helm-review-score: - extends: .helm-score - script: - - if [ -z "$HELM_COMMON_VALUES" ]; then HELM_COMMON_VALUES=/dev/null; fi - - awkenvsubst < "$HELM_COMMON_VALUES" > generated-values-common.yml - - awkenvsubst < "$HELM_REVIEW_VALUES" > generated-values-review.yml - - helm template $helm_package --values generated-values-common.yml --values generated-values-review.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - - rules: - # exclude when $HELM_KUBE_SCORE_DISABLED is set - - if: '$HELM_KUBE_SCORE_DISABLED == "true"' - when: never - - if: '$HELM_REVIEW_VALUES == null || $HELM_REVIEW_VALUES == ""' - when: never - # only on non-production, non-integration branches - - if: '$CI_COMMIT_REF_NAME =~ $PROD_REF || $CI_COMMIT_REF_NAME =~ $INTEG_REF' - when: never - - !reference [.test-policy, rules] - -helm-integration-score: - extends: .helm-score - script: - - if [ -z "$HELM_COMMON_VALUES" ]; then HELM_COMMON_VALUES=/dev/null; fi - - awkenvsubst < "$HELM_COMMON_VALUES" > generated-values-common.yml - - awkenvsubst < "$HELM_INTEG_VALUES" > generated-values-integration.yml - - helm template $helm_package --values generated-values-common.yml --values generated-values-integration.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - - rules: - # exclude when $HELM_SCORE_DISABLED is set - - if: '$HELM_KUBE_SCORE_DISABLED == "true"' - when: never - - if: '$HELM_INTEG_VALUES == null || $HELM_INTEG_VALUES == ""' - when: never - # only on non-production branches - - if: '$CI_COMMIT_REF_NAME =~ $PROD_REF' - when: never - - !reference [.test-policy, rules] - -helm-staging-score: - extends: .helm-score - script: - - if [ -z "$HELM_COMMON_VALUES" ]; then HELM_COMMON_VALUES=/dev/null; fi - - awkenvsubst < "$HELM_COMMON_VALUES" > generated-values-common.yml - - awkenvsubst < "$HELM_STAGING_VALUES" > generated-values-staging.yml - - helm template $helm_package --values generated-values-common.yml --values generated-values-staging.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - - rules: - # exclude when $HELM_SCORE_DISABLED is set - - if: '$HELM_KUBE_SCORE_DISABLED == "true"' - when: never - - if: '$HELM_STAGING_VALUES == null || $HELM_STAGING_VALUES == ""' - when: never - - !reference [.test-policy, rules] - -helm-prod-score: - extends: .helm-score - script: - - if [ -z "$HELM_COMMON_VALUES" ]; then HELM_COMMON_VALUES=/dev/null; fi - - awkenvsubst < "$HELM_COMMON_VALUES" > generated-values-common.yml - - awkenvsubst < "$HELM_PROD_VALUES" > generated-values-prod.yml - - helm template $helm_package --values generated-values-common.yml --values generated-values-prod.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - - rules: - # exclude when $HELM_SCORE_DISABLED is set - - if: '$HELM_KUBE_SCORE_DISABLED == "true"' - when: never - - if: '$HELM_PROD_VALUES == null || $HELM_PROD_VALUES == ""' - when: never - - !reference [.test-policy, rules] - # ================================================== # Stage: package-build # ==================================================