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 )
docker:
- image: gcr.io/プロジェクト名/イメージ名:タグ
auth:
username: _json_key
password: $GCR_CREDS
参考: Impossible to use a private gcr.io base image on Circle 2.0?