Edited at

werckerのdocker-pushでDockerイメージをContainer Registry(GCR)に登録する


やりたいこと

1.Javaのソースコードをbitbucketにpush

2.werckerでビルド

3.ビルドされたjarをDockerイメージに配置

4. 3.のイメージを、GCE上で動かす (※別記事を書く予定です。本記事では触れません。)


wercker.yml

プロジェクト直下に配置します。

internal/docker-pushについて定義を書いていきます。

前段のpipelineでbuildを行うことで、必要なjarファイルが/pipeline/output配下にコピーされています。

docker-pushでは、/pipeline/output配下のファイルたちが

Dockerイメージ内の/pipeline/sourceにコピーされるので、

キックしたいjarファイルのファイルパスは下記のようになっています。


wercker.yml

my-wercker-process:

box: gcr.io/google-appengine/openjdk
steps:
- internal/docker-push:
# 固定文字列
username: _json_key
#GCPのサービスアカウント発行時にダウンロードできるjson
password: $GCR_JSON_KEY_FILE
repository: gcr.io/$PROJECT_ID/$MY_IMAGE
registry: https://gcr.io/v2
ports: 8080
# 環境変数
env: "hoge=value1 fuga=value2"
# jar実行
entrypoint: java -Djava.security.egd=file:/dev/./urandom -jar /pipeline/source/app.jar


wercker上の設定

下記画面で設定したkey-valueが、wercker.ymlの$に格納されます。

※keyは適当です

スクリーンショット 2019-04-09 17.15.22.png


つまずきポイント(1): internal/docker-pushを使う場合、internal/docker-build内でDockerfileを用いたdocker buildはできない

steps:

- internal/docker-push:

の前段で

- internal/docker-build:

dockerfile: Dockerfile

みたいなことをしていたのですが、Dockerfileに書いた内容がイメージに反映されませんでした。

そのかわりにdocker-push内にイメージ作成の定義を書けます。

https://devcenter.wercker.com/administration/containers/building-an-image/


つまずきポイント(2): docker-pushしたらGCPに拒否られた

GCRのサービス アカウントのIAMの設定で、

【ストレージ管理者】

を追加してあげてください。

スクリーンショット 2019-04-09 17.10.46.png


結果

ContainerRegistryのイメージ一覧に、

repository: gcr.io/$PROJECT_ID/$MY_IMAGE

で登録した$MY_IMAGEの名前でイメージが登録されていれば成功です。

スクリーンショット 2019-04-15 10.25.22.png


参考URL


docker-push

https://devcenter.wercker.com/administration/containers/pushing-images/

https://devcenter.wercker.com/development/steps/internal-steps/#internal-docker-push


Container Registry概要

https://cloud.google.com/container-registry/docs/overview?hl=ja