diff --git a/README.md b/README.md index 0bfe958f83c7a9209ca838d949890d12ad708c5a..620aa2dbcf50221ff66b0cc685626f45ebeae122 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ The Helm template uses some global configuration used throughout all jobs. | --------------------- | -------------------------------------- | ----------------- | | `HELM_CLI_IMAGE` | The Docker image used to run Helm <br/>:warning: **set the version required by your Kubernetes server** | `alpine/helm:latest` | | `HELM_CHART_DIR` | The folder in which is stored the Helm chart | `.` | +| `HELM_COMMON_VALUES` | Common values file (used for all environments, overridden by specific per-env values files) | undefined (none) | | `HELM_ENV_VALUE_NAME` | The environment type variable set to helm | `env` | | `HELM_HOSTNAME_VALUE_NAME` | The hostname variable set to helm | `hostname` | diff --git a/kicker.json b/kicker.json index 4547c744a79c50899cdfd730592a0cce4f28c264..f6f40a251fa225bafa62e2f6fa0124079cad1110 100644 --- a/kicker.json +++ b/kicker.json @@ -14,6 +14,10 @@ "description": "The folder in which is stored the Helm chart", "default": "." }, + { + "name": "HELM_COMMON_VALUES", + "description": "Common values file (used for all environments, overridden by specific per-env values files)" + }, { "name": "HELM_DEPLOY_CHART", "description": "The Helm [chart](https://helm.sh/docs/topics/charts/) to deploy. _Only required if you want to deploy an **external** chart._" diff --git a/templates/gitlab-ci-helm.yml b/templates/gitlab-ci-helm.yml index 697c1b5e357d64f45d5ab1f512bb9b0386b8c532..e3216e8993ff993b258d7eec87c932c45d2e4342 100644 --- a/templates/gitlab-ci-helm.yml +++ b/templates/gitlab-ci-helm.yml @@ -40,6 +40,8 @@ variables: # KUBE_NAMESPACE: "default" # KUBECONFIG: "" +# HELM_COMMON_VALUES: "values-common.yml" + # HELM_REVIEW_DISABLED: "true" # HELM_REVIEW_VALUES: "values-review.yml" # HELM_REVIEW_NAMESPACE: "" @@ -351,10 +353,16 @@ stages: helm_opts=$(get_helm_config_opt) + if [ -n "$HELM_COMMON_VALUES" ]; then + log_info "--- using \\e[32mcommon values\\e[0m file: \\e[33;1m${HELM_COMMON_VALUES}\\e[0m" + awkenvsubst < "$HELM_COMMON_VALUES" > generated-values-common.yml + helm_values_opt="--values generated-values-common.yml" + fi + if [ -n "$values_files" ]; then log_info "--- using \\e[32mvalues\\e[0m file: \\e[33;1m${values_files}\\e[0m" awkenvsubst < "$values_files" > generated-values.yml - helm_values_opt="--values generated-values.yml" + helm_values_opt="$helm_values_opt --values generated-values.yml" fi if [ -f "$CI_PROJECT_DIR/.kubeconfig" ]; then @@ -529,6 +537,17 @@ helm-lint: - "**/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: '$CI_MERGE_REQUEST_ID || $HELM_YAMLLINT_DISABLED == "true"' + when: never + - if: '$HELM_COMMON_VALUES' + + helm-values-review-lint: extends: .helm-values-lint script: @@ -576,8 +595,10 @@ helm-values-prod-lint: 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_CHART_DIR --values generated-values-review.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - + - helm template $HELM_CHART_DIR --values generated-values-common.yml --values generated-values-review.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - rules: # exclude merge requests - if: $CI_MERGE_REQUEST_ID @@ -594,8 +615,10 @@ helm-review-score: 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_CHART_DIR --values generated-values-integration.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - + - helm template $HELM_CHART_DIR --values generated-values-common.yml --values generated-values-integration.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - rules: # exclude merge requests - if: $CI_MERGE_REQUEST_ID @@ -612,8 +635,10 @@ helm-integration-score: 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_CHART_DIR --values generated-values-staging.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - + - helm template $HELM_CHART_DIR --values generated-values-common.yml --values generated-values-staging.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - rules: # exclude merge requests - if: $CI_MERGE_REQUEST_ID @@ -630,8 +655,10 @@ helm-staging-score: 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_CHART_DIR --values generated-values-prod.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - + - helm template $HELM_CHART_DIR --values generated-values-common.yml --values generated-values-prod.yml | kube-score score ${HELM_KUBE_SCORE_ARGS} - rules: # exclude merge requests - if: $CI_MERGE_REQUEST_ID