Helm Charts
Helm chart releaser with gitlab-ci
Table Of Content
Problem:Helm charts 每個更新都需要 SRE 或 RD 們手動上版到 GCP Artifacts Registry 上。有時會出現忘記推倒 GCP Artifacts Registry 上,只有將程式碼推到 Gitlab 上。避免遺漏的問題。
Solution:可以根據一下方式設定使用 Gitlab CI 協助,將 Artifacts Registry 自動上傳至 GCP Artifacts Registry。
專案參考: GKE-Helm
- 在 Helm template 的根目錄上建立 .gitlab-ci.yml 如下:
stages:
- Package
include:
- "helm-templates.yml"
- "helm-package.yml"
- 在 Helm template 的根目錄上建立 helm-package.yml 如下:
package:
extends: .login-package
script:
- helm package charts/${CHART}
- gcloud auth activate-service-account --key-file=<Service_Account json> # 這裡是放需要授權的 Service Account
- gcloud auth configure-docker <artifact registry region>-docker.pkg.dev
- helm push ${CHART}-*.tgz oci://<artifact registry region>-docker.pkg.dev/<GCP_PROJECT_ID>/<artifact registry repo 名稱>
- rm ${CHART}-*.tgz
rules:
- if: '$CI_COMMIT_BRANCH == "main"' # 條件:只有在 main 分支才會觸法
changes: # 條件:只有在以下文件有做異動才會觸法
- charts/${CHART}/*.yaml
- charts/${CHART}/templates/*.tpl
- charts/${CHART}/templates/*.yaml
parallel: !reference [.parallel, charts]
- 在 Helm template 的根目錄上建立 helm-templates.yml 如下:
.login-package:
stage: Package
image:
name: azman0101/gcloud-kubectl-helm:latest # 這是在 Docker Hub 上找到的 Docker Image
tags:
- shared-javascript # 這裡需要改用各自的 gitlab runner tags
before_script:
- mkdir -p $HOME/.docker
- echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
# # 管理 helm 的專案列表
.parallel:
charts:
matrix:
- CHART: # Helm Charts 的資料夾名稱
["app-dev", "app-qa", "app-prod", "app-release", "app-staging"]
- 完成啦。上班後如果有異動就會出發 pipeline