2025年10月18日土曜日

GitlabCI と werf を組み合わせてイメージのビルドとプッシュをしてみる

GitlabCI と werf を組み合わせてイメージのビルドとプッシュをしてみる

概要

前回 werf に入門してみました
今回は GitlabCI と連携して werf を使ってみます
なお Gitlab Runner は docker executor なので werf の公式イメージを使ってビルドアンドプッシュを行います

環境

  • werf 2-stable
  • Gitlab 18.2.6
  • Gitlab Runner 18.2.2

Gitlab Runner 側設定

以下どちらかを有効にする必要があります

  • 特権モード有効にする
  • seccompとapparmorを無効にする

前者であれば以下のように設定します

[[runners]]
  name = "<name of the Runner you registered>"
  [runners.docker]
    privileged = true
    volumes = [
      "werf-cache:/home/build/.werf",
      "buildah-cache:/home/build/.local/share/containers"
    ]

後者であれば以下のように設定します

[[runners]]
  name = "<name of the Runner you registered>"
  [runners.docker]
    security_opt = ["seccomp:unconfined", "apparmor:unconfined"]
    volumes = [
      "werf-cache:/home/build/.werf",
      "buildah-cache:/home/build/.local/share/containers"
    ]

.gitlab-ci.yml

Gitlab のコンテナレジストリはオンにしておきましょう
以下は werf を使って build and push する最低限の設定になります

  • vim .gitlab-ci.yml
stages:
  - test

werf_build_and_push:
  stage: test
  image:
    name: "registry.werf.io/werf/werf:2-stable"
    pull_policy: always
  before_script:
    - cat $(werf ci-env gitlab --as-file)
    - source $(werf ci-env gitlab --as-file)
  script:
    - werf build --repo ${CI_REGISTRY_IMAGE} --add-custom-tag latest

実際にパイプラインを走らせるとコンテナレジストリにイメージがあることが確認できます
どうやら werf は指定のイメージだけではなくメタデータなどを管理するイメージもコンテナレジストリ上で管理するようです

ポイント

werf を Gitlab で使って便利な点は source $(werf ci-env gitlab --as-file) の部分です
レジストリの認証情報やリポジトリの基本設定を自動で読み込んでくれます
例えば CI_REGISTRY_IMAGE は werf 用の変数 WERF_REPO を使っても OK です

その他コマンド

  • werf converge
    • ビルドアンドプッシュと k8s 環境へのデプロイもしてくれます
  • werf cleanup --repo container-registry/username/reponame --without-kube
    • 使用されていないイメージを自動で削除してくれます
    • 基本は --without-kube なしで使用し k8s 環境で使用されていないイメージを自動で削除しコンテナレジストリのディスク容量を解放するのが目的です
  • werf purge --repo container-registry/username/reponame
    • cleanup に似ていますがこれはイメージが使用されていようがいまいが強制的にコンテナレジストリ上のイメージを削除します

その他各種コマンドは https://werf.io/docs/v2/reference/cli/overview.html を参照してください

最後に

GitlabCI と werf を組み合わせてイメージのビルドアンドプッシュをしてみました
kaniko 代替としてはこれで十分な気もします
そもそも werf は k8s 環境に特化したツールなのでデプロイまで含めてやりたい場合などは werf 一択かなと思います

参考サイト

0 件のコメント:

コメントを投稿