概要
前回 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 件のコメント:
コメントを投稿