Edited at

CircleCI で GCR(Container Registry) の private な Docker image を利用する方法

CircleCI 2.0, 2.1 で確認。

会社のプロジェクトなどで、 GCR等で private にした Docker image をそのままCircleCIのジョブで使用したいことがあると思います。特に GCR はやり方を忘れそうだったので備忘録として残しておきます。


手順


① GCRにアクセスするための適当なサービスアカウントをIAMで作成

GCR のDocker imageは GCS に自動作成されたバケットに保存されており、

CircleCI からそのバケットにアクセスする必要がある。


② GCRのimageが保存されているGCSバケットに対して、①に閲覧権限を付与

GCRにDocker imageを置いていれば artifacts.プロジェクト名.appspot.com のような名前のバケット名が自動的にできており、そこにimageが保存されている。

(GCRのリージョンによっては asia.artifacts.プロジェクト名.appspot.com のようになる)

GCSの画面にて、このバケットの ストレージオブジェクト閲覧者 の権限を ①で作成したサービスアカウントに対して付与する。

(GCR自体にアクセスするためのロールは存在しないことに注意。 参考: https://cloud.google.com/container-registry/docs/access-control#permissions_and_roles


③ 権限を付与したサービスアカウントのJSONキーをCircleCIの環境変数に設定

②で権限を付与した後にサービスアカウントのJSONキーをダウンロードし、CircleCIの環境変数に設定する。 (今回は GCR_CREDS という名前に。)

JSONキーの内容をコピーしてそのまま環境変数の値として入れればOK。


.circleci/config.yaml に認証情報を記述

③で設定した環境変数を使って以下のように記述すれば完成。

_json_key は、GCRにサービスアカウントからアクセスする際のユーザー名らしい。

(参考: https://cloud.google.com/container-registry/docs/advanced-authentication )


.circleci/config.yaml

docker: 

- image: gcr.io/プロジェクト名/イメージ名:タグ
auth:
username: _json_key
password: $GCR_CREDS

参考: Impossible to use a private gcr.io base image on Circle 2.0?