LoginSignup
8
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-02-15

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?

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2