#やりたいこと
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ファイルのファイルパスは下記のようになっています。
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は適当です
#つまずきポイント(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の設定で、
【ストレージ管理者】
を追加してあげてください。
#結果
ContainerRegistryのイメージ一覧に、
repository: gcr.io/$PROJECT_ID/$MY_IMAGE
で登録した$MY_IMAGEの名前でイメージが登録されていれば成功です。
#参考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