LoginSignup
3
2

More than 5 years have passed since last update.

GCP service accountを利用してgoogle container registryにpushする

Last updated at Posted at 2016-09-14

tl:dr

gcr.ioにサービスアカウントでpushする方法がわかんなかったので調べた。

  1. サービスアカウント(JWT)発行
  2. containerが保存されているbucketのWrite権限を与える
  3. $ gcloud auth activate-service-account --key-file $json_file
  4. $ gcloud docker push ${image}

概要

同一GCP Projectなら何も考えずに docker pushできるけど
別プロジェクトだと出来ないからservice account使ってよろしくやる。

結局IAMにどのpermissionが必要か?

サービスアカウントにどんな権限が必要なのか調べたら

containerが保存されているgoogle strageのRead/Write権限

とのこと

google container registryを利用してるProjectの
bucket listを覗いてるとなんかそれっぽいbucketができてる

container bucketに作ったサービスアカウントのWrite権限を追加する

e.g. artifacts.your_project.appspot.com

gcr_bucket.png

docker push

$ docker build -t gcr.io/your_project/sugoi-container:latest  .
$ gcloud auth activate-service-account --key-file $json_file
$ gcloud docker push gcr.io/your_project/sugoi-container:latest

Jenkins Pipelineでやる場合

おまけ

前提

  • jenkinsにsecret fileとしてサービスアカウントのJWTを登録しておく
    • e.g. gcr-key
  • jenkinsはgcloud commandが実行可能
  def imageTag = "gcr.io/your_project/image:build-${env.BUILD_NUMBER}"
  docker.build("${imageTag}")


  withCredentials([[$class: 'FileBinding', credentialsId: 'gcr-key', variable: 'JSON_KEY']]) {
    sh 'gcloud auth activate-service-account --key-file $JSON_KEY'
  }
  sh("gcloud docker push ${imageTag}")

jenkinsにgcloudコマンド入れたくないよって場合 docker login使う方法もある。

追記

gcloud auth activate-service-accountすると
gcloud commandのアカウントが切り替わった状態になるので注意すること。

参考資料

docker login使う方法とかも書いてる
https://cloud.google.com/container-registry/docs/advanced-authentication

3
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
3
2