charles
Charles
Helm Charts

Helm chart releaser with gitlab-ci

Helm chart releaser with gitlab-ci
0 views
2 min read
#Helm Charts

Problem:Helm charts 每個更新都需要 SRE 或 RD 們手動上版到 GCP Artifacts Registry 上。有時會出現忘記推倒 GCP Artifacts Registry 上,只有將程式碼推到 Gitlab 上。避免遺漏的問題。

Solution:可以根據一下方式設定使用 Gitlab CI 協助,將 Artifacts Registry 自動上傳至 GCP Artifacts Registry。

專案參考: GKE-Helm

  1. 在 Helm template 的根目錄上建立 .gitlab-ci.yml 如下:
stages:
  - Package
include:
  - "helm-templates.yml"
  - "helm-package.yml"
  1. 在 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]
  1. 在 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"]
  1. 完成啦。上班後如果有異動就會出發 pipeline
Image