Cloud Build で Docker イメージをビルドして Artifact Registry にプッシュするシステムでは、Artifact Registry に古い Docker イメージが溜まっていき、必要以上にコストがかかってしまうという問題があります。
Artifact Registry にライフサイクル管理機能があれば良いのですが、2022年3月時点ではありません。
そこで、Cloud Build のビルドに Artifact Registry にある古い Docker イメージを削除するステップを追加します。
例えば latest
タグが付いていないイメージを削除するには下記のようにします。
steps:
- id: 'Delete old Docker images'
name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
args:
- -ceux
- |
gcloud artifacts docker images list ${_IMAGE_NAME} --include-tags --filter="TAGS!=latest" --format="value(DIGEST)" | xargs -n1 -I{} gcloud artifacts docker images delete --quiet --async ${_IMAGE_NAME}@{}
list
コマンドの際にタグでフィルターしています。このとき --include-tags
オプションを忘れないでください。
delete
コマンドの際は --async
オプションを付けることによって削除完了を待たずにコマンドが終了するようにしています。 --quiet
オプションを付け忘れるのと削除時の yes/no 確認で止まってしまうのでご注意ください。
コメントを送る
コメントはブログオーナーのみ閲覧できます