Skip to content

Kubernetes カスタムコントローラーをビルド

GitLab Runner を使って Kubernetes カスタムコントローラーのコンテナイメージをビルドします。カスタムコントローラーは Kubebuilder をベースに実装されていることを前提とします。

設定ファイル

.gitlab-ci.yml

cf.

下記ステージで構成します:

  • テスト
    • テスト関数を一括実行し、カバレッジを出力します。
  • ビルド
    • タグが切られたタイミングで、kaniko を使ってコントローラーのコンテナイメージをビルドします。
    • 並行して、コントローラーデプロイ向けのマニフェストファイルを生成し、artifact に含めます。
  • リリース
    • 上記イメージビルドに併せてリリースを作成します。リリース画面からコントローラーのマニフェストがダウンロードできます。
stages:
  - test
  - build
  - release
variables:
  CONTROLLER: nob-controller # コントローラー名
test:
  stage: test
  image:
    name: golang:1.24
  script:
    - go install gotest.tools/gotestsum@latest
    - make test
build_image:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"${HARBOR_HOST}\":{\"auth\":\"$(echo -n ${HARBOR_USERNAME}:${HARBOR_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${HARBOR_HOST}/${HARBOR_PROJECT}/${CONTROLLER}:$CI_COMMIT_TAG"
  rules:
    - if: $CI_COMMIT_TAG
build_manifest:
  stage: build
  image:
    name: alpine/k8s:1.34.1
  script:
    - cd ${CI_PROJECT_DIR}/config/manager && kustomize edit set image controller=${HARBOR_HOST}/${HARBOR_PROJECT}/${CONTROLLER}:$CI_COMMIT_TAG
    - cd ${CI_PROJECT_DIR} && mkdir deploy
    - kustomize build config/default > deploy/${CONTROLLER}.yaml
  artifacts:
    when: always
    paths:
      - deploy/${CONTROLLER}.yaml
  rules:
    - if: $CI_COMMIT_TAG
release:
  stage: release
  image: registry.gitlab.com/gitlab-org/cli:latest
  script:
    - echo "Running the release job."
  release:
    tag_name: ${CI_COMMIT_TAG}
    name: ${CI_COMMIT_TAG}
    description: Release version ${CI_COMMIT_TAG}
    assets:
      links:
        - name: ${CONTROLLER}.yaml
          filepath: /${CONTROLLER}.yaml
          url: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/artifacts/${CI_COMMIT_TAG}/raw/deploy/${CONTROLLER}.yaml?job=build_manifest
  rules:
    - if: $CI_COMMIT_TAG

成果物の利用手順

カスタムリソースを利用する際は下記マニフェストを利用してください:

  • コントローラー: release からマニフェスト yaml をダウンロード
  • カスタムリソース: config/samples/ 配下の向けマニフェスト yaml