diff --git a/README.md b/README.md index 79d7ed6c75214fe6cb563159d63bba7247969626..5a58ffd7eef6879f7d2dca083663eb30239a2481 100644 --- a/README.md +++ b/README.md @@ -355,6 +355,22 @@ The general version format will be `<x.y.z>-<label>`: * :warning: when `HELM_PUBLISH_SNAPSHOT_ENABLED` is enabled, the chart is additionally packaged (and published) with a label suffixed with `snapshot`<br/> _(ex: `snapshot` on production branch and `review-feature-12-snapshot` on branch `review/feature-12`)_ +#### Package output variables + +The `helm-package` job produces _output variables_ that are propagated to downstream jobs (using [dotenv artifacts](https://docs.gitlab.com/ee/ci/pipelines/job_artifacts.html#artifactsreportsdotenv)): + +* `$helm_package_file`: the packaged chart (tgz file), +* `$helm_package_name`: the chart/package name, +* `$helm_package_version`: the package [version](#chart-version-management). + +If `HELM_PUBLISH_SNAPSHOT_ENABLED` is set to `true`, extra variables are produced: + +* `$helm_snapshot_package_name`: the snapshot package name, +* `$helm_snapshot_package_version`: the snapshot package [version](#chart-version-management), +* `$helm_snapshot_package_remote_url`: the remote url where the snapshot package was published. + +Those variables may be freely used in downstream jobs. + ### `helm-publish` job This job publishes the packaged chart to a [chart repository](https://helm.sh/docs/topics/chart_repository/) or [OCI-based registry](https://helm.sh/docs/topics/registries/). It uses the following variables: diff --git a/templates/gitlab-ci-helm.yml b/templates/gitlab-ci-helm.yml index 52036edeedff9f7428587121af776b76011d373c..114eae3151d338ab7faf620f157e2c2731e9f7c0 100644 --- a/templates/gitlab-ci-helm.yml +++ b/templates/gitlab-ci-helm.yml @@ -455,17 +455,16 @@ stages: helm_opts="$helm_opts --namespace $namespace" fi - package=$(ls -1 ./helm_packages/*.tgz 2>/dev/null || echo "") - package=${package:-$HELM_DEPLOY_CHART} - if [ -z "${package}" ]; then + _pkg=${helm_package_file:-$HELM_DEPLOY_CHART} + if [ -z "${_pkg}" ]; then log_error "No Chart to deploy! Please use \\e[32m\$HELM_DEPLOY_CHART\\e[0m to deploy a chart from a repository" log_error "Or check the provided variables to package your own chart!" exit 1 fi - log_info "--- using \\e[32mpackage\\e[0m: \\e[33;1m${package}\\e[0m" + log_info "--- using \\e[32mpackage\\e[0m: \\e[33;1m${_pkg}\\e[0m" # shellcheck disable=SC2086 - helm $helm_opts $HELM_DEPLOY_ARGS $environment_name $package + helm $helm_opts $HELM_DEPLOY_ARGS $environment_name $_pkg # maybe execute post deploy script postscript="$HELM_SCRIPTS_DIR/helm-post-deploy.sh" @@ -561,6 +560,7 @@ stages: } function helm_package() { + rm -f helm-package.env # determine chart version to publish (semantic-release integration) if [[ "${SEMREL_INFO_ON}" && "${DOCKER_SEMREL_RELEASE_DISABLED}" != "true" ]] then @@ -576,6 +576,8 @@ stages: base_version=$(awk -F':' '/^version:/ {print $2}' "$HELM_CHART_DIR/Chart.yaml") base_version=${base_version// /} fi + chart_name=$(awk -F':' '/^name:/ {print $2}' "$HELM_CHART_DIR/Chart.yaml") + chart_name=${chart_name// /} # also determine version label prod_ref_expr=${PROD_REF#/} @@ -594,6 +596,9 @@ stages: # shellcheck disable=SC2086 helm ${TRACE+--debug} $HELM_PACKAGE_ARGS --version ${base_version}${version_label} $HELM_CHART_DIR --destination helm_packages + helm_package=$(ls -1 ./helm_packages/*.tgz 2>/dev/null || echo "") + echo -e "helm_package_file=${helm_package}\\nhelm_package_version=${base_version}${version_label}\\nhelm_package_name=${chart_name}" > helm-package.env + if [[ "$HELM_PUBLISH_SNAPSHOT_ENABLED" == "true" ]] then log_info "snapshot enabled: also package and publish chart with version: \\e[33;1m${base_version}${version_label}-snapshot\\e[0m" @@ -602,17 +607,18 @@ stages: helm ${TRACE+--debug} $HELM_PACKAGE_ARGS --version ${base_version}${version_label}-snapshot $HELM_CHART_DIR --destination /tmp/helm_snapshot snapshot_package=$(ls -1 /tmp/helm_snapshot/*.tgz 2>/dev/null || echo "") helm_publish "$snapshot_package" + echo -e "helm_snapshot_package_name=${chart_name}\\nhelm_snapshot_package_version=${base_version}${version_label}-snapshot\\nhelm_snapshot_package_remote_url=${HELM_PUBLISH_URL}" >> helm-package.env fi } function helm_publish() { - helm_package=${1:-$(ls -1 ./helm_packages/*.tgz 2>/dev/null || echo "")} - if [[ -z "$helm_package" ]]; then + _pkg=${1:$helm_package_file} + if [[ -z "$_pkg" ]]; then log_error "No package found to deploy" exit 1 fi - helm_package_name=$(basename "$helm_package") - log_info "--- Publishing Helm package ${helm_package_name} to: ${HELM_PUBLISH_URL}..." + _pkg_name=$(basename "$_pkg") + log_info "--- Publishing Helm package ${_pkg_name} to: ${HELM_PUBLISH_URL}..." # method to lowercase HELM_PUBLISH_METHOD=$(echo "$HELM_PUBLISH_METHOD" | tr '[:upper:]' '[:lower:]') @@ -649,13 +655,13 @@ stages: # enable OCI support prior to v3.8.0 export HELM_EXPERIMENTAL_OCI=1 # shellcheck disable=SC2086 - helm ${TRACE+--debug} push "$helm_package" "$HELM_PUBLISH_URL" + helm ${TRACE+--debug} push "$_pkg" "$HELM_PUBLISH_URL" else log_info "Installing cm-push plugin (version ${HELM_CM_PUSH_PLUGIN_VERSION:-latest})..." # shellcheck disable=SC2086 helm ${TRACE+--debug} plugin install ${HELM_CM_PUSH_PLUGIN_VERSION:+--version "$HELM_CM_PUSH_PLUGIN_VERSION"} https://github.com/chartmuseum/helm-push || true # shellcheck disable=SC2086 - helm ${TRACE+--debug} cm-push --username "$username" --password "$password" "$helm_package" "$HELM_PUBLISH_URL" + helm ${TRACE+--debug} cm-push --username "$username" --password "$password" "$_pkg" "$HELM_PUBLISH_URL" fi ;; post) @@ -664,10 +670,10 @@ stages: log_info "--- installing curl (required to publish Helm charts)..." apk add --no-cache curl fi - curl --fail --request POST --form "chart=@$helm_package" --user "$username:$password" "$HELM_PUBLISH_URL" + curl --fail --request POST --form "chart=@$_pkg" --user "$username:$password" "$HELM_PUBLISH_URL" ;; put) - wget -v --method=PUT --user="$username" --password="$password" --body-file="$helm_package" "$HELM_PUBLISH_URL/$helm_package_name" -O - + wget -v --method=PUT --user="$username" --password="$password" --body-file="$_pkg" "$HELM_PUBLISH_URL/$_pkg_name" -O - ;; custom) pubscript="$HELM_SCRIPTS_DIR/helm-publish.sh" @@ -858,6 +864,8 @@ helm-package: expire_in: 1 week paths: - helm_packages/ + reports: + dotenv: helm-package.env # ================================================== # Stage: publish