From 25f82877343fb808d18d9c40680caa6696391295 Mon Sep 17 00:00:00 2001 From: David Hiendl Date: Wed, 5 Oct 2022 14:40:27 +0200 Subject: [PATCH] added helm templates --- gitlab/HelmChart.yml | 90 ++++++++++++++++++++++++++++++++++++++++++++ gitlab/README.md | 39 +++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 gitlab/HelmChart.yml diff --git a/gitlab/HelmChart.yml b/gitlab/HelmChart.yml new file mode 100644 index 0000000..c952a52 --- /dev/null +++ b/gitlab/HelmChart.yml @@ -0,0 +1,90 @@ +.HelmChartLint: &HelmChartLint + + image: alpine/helm:3.10.0 + + variables: + CHART_PATH: "$CI_PROJECT_DIR/chart/" + + script: + - cd "$CHART_PATH" + - helm lint . + +.HelmChartPublish: &HelmChartPublish + + image: alpine/helm:3.10.0 + + variables: + HELM_STABLE_ENDPOINT: "$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/helm/stable" + HELM_DEVEL_ENDPOINT: "$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/helm/devel" + CHART_PATH: "$CI_PROJECT_DIR/chart/" + HELM_REPO_NAME: "$CI_PROJECT_NAME" + GITLAB_HELM_REPO_AUTH: "true" + + TAG_COMMIT_ENABLE: "true" + TAG_COMMIT_BASE_VERSION: "0.0.0" + TAG_COMMIT_PREFIX: "commit-" + + TAG_REF_SLUG_ENABLE: "true" + TAG_REF_SLUG_BASE_VERSION: "0.0.0" + + before_script: + # install chartmuseum plugin + - helm plugin install https://github.com/chartmuseum/helm-push + - | + if [[ "$GITLAB_HELM_REPO_AUTH" == "true" ]]; then + helm repo add --username="${CI_REGISTRY_USER}" --password="${CI_REGISTRY_PASSWORD}" "$HELM_REPO_NAME" $HELM_STABLE_ENDPOINT + fi + + script: + - cd "$CHART_PATH" + - helm package . + + # default tag based on commit + - | + if [[ "$IMAGE_COMMIT_ENABLE" == "true" ]]; then + helm cm-push . "$HELM_REPO_NAME" --version=$TAG_COMMIT_BASE_VERSION-$IMAGE_COMMIT_PREFIX-$CI_COMMIT_SHA + fi + + # add tag for reference if available + - | + if [[ "$IMAGE_REF_SLUG_ENABLE" == "true" ]] && [[ ! -z $CI_COMMIT_REF_NAME ]]; then + if [[ ! -z "CI_COMMIT_TAG" ]]; then + # special handling for tags: strip leading "v" character if present to allow tags with or without leading "v" to work + helm cm-push . "$HELM_REPO_NAME" --version="${CI_COMMIT_TAG#"v"}" + else + helm cm-push . "$HELM_REPO_NAME" --version=$TAG_REF_SLUG_BASE_VERSION-$CI_COMMIT_REF_SLUG + fi + fi + +.HelmReleaseTag: &HelmReleaseTag + image: registry.gitlab.com/gitlab-org/release-cli:latest + + only: + - tags + + variables: + HELM_STABLE_ENDPOINT: "$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/helm/stable" + HELM_DEVEL_ENDPOINT: "$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/helm/devel" + CHART_PATH: "$CI_PROJECT_DIR/chart/" + HELM_REPO_NAME: "$CI_PROJECT_NAME" + + before_script: + - CHART_NAME=$(cat Chart.yaml | grep "^name") # extract name from Chart.yaml + - CHART_NAME="${CHART_NAME#"name:"}" # strip prefix + - CHART_NAME="$(echo $CHART_NAME | xargs)" # trim whitespace + + script: + - echo "Running the release job." + + release: + name: 'Release $CI_COMMIT_TAG' + description: | + helm repo add --username --password $HELM_REPO_NAME $HELM_STABLE_ENDPOINT + helm install $HELM_REPO_NAME/$CHART_NAME --version "${CI_COMMIT_TAG#"v"}" + tag_name: '$CI_COMMIT_TAG' + assets: + links: + - name: "Helm Charts" + # name: "Helm Chart $CI_COMMIT_TAG" + # TODO find a way to link directly to the package created + url: $CI_PROJECT_URL/-/packages/?type=Helm&orderBy=created_at&sort=desc&search[]= \ No newline at end of file diff --git a/gitlab/README.md b/gitlab/README.md index 754c9d1..191395d 100644 --- a/gitlab/README.md +++ b/gitlab/README.md @@ -35,3 +35,42 @@ docker-image: # - /^v[0-9].*$/i ``` + +## Helm Charts + +Add to .gitlab-ci.yml + +```yaml + +include: + - remote: 'https://raw.githubusercontent.com/dhswt/build-scripts/master/gitlab/HelmChart.yml' + +helm-lint: + extends: .HelmChartLint + +helm-publish: + extends: .HelmChartPublish + +# overwrite to change default variables below +# variables: +# HELM_STABLE_ENDPOINT: "$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/helm/stable" +# HELM_DEVEL_ENDPOINT: "$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/helm/devel" +# CHART_PATH: "$CI_PROJECT_DIR/chart/" +# HELM_REPO_NAME: "$CI_PROJECT_NAME" +# GITLAB_HELM_REPO_AUTH: "true" +# +# TAG_COMMIT_ENABLE: "true" +# TAG_COMMIT_BASE_VERSION: "0.0.0" +# TAG_COMMIT_PREFIX: "commit-" +# +# TAG_REF_SLUG_ENABLE: "true" +# TAG_REF_SLUG_BASE_VERSION: "0.0.0" + +helm-release: + extends: .HelmReleaseTag + + # defaults to tags only: + # only: + # - tags + +``` \ No newline at end of file