logo

アルパカログ

Artifact Registryにある古いDockerイメージをCloud Buildから削除する

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}@{}
cloudbuild.yaml

list コマンドの際にタグでフィルターしています。このとき --include-tags オプションを忘れないでください。

delete コマンドの際は --async オプションを付けることによって削除完了を待たずにコマンドが終了するようにしています。 --quiet オプションを付け忘れるのと削除時の yes/no 確認で止まってしまうのでご注意ください。