標記の通り、CircleCIのOrb(aws-ecr)を使っていて、build資材をルートディレクトリではなく別のディレクトリに置いていたので、build資材のpath指定を変えたくなりました。
build-pathをどっかで渡せばいいんだよね?と思ってやってみたら、ハマったので記事にまとめました。
前提
- circleci 2.1
- circleci/aws-ecr@8.2.1
やりたいこと
CircleCIのOrb(aws-ecr)の処理(build-and-push-image)の際に、build資材のpath指定をルートディレクトリではなく、指定のディレクトリに変更したいです。
Orbとは?
Orb は、再利用可能なコードスニペットです。Orb を使用すると、繰り返しのプロセスを自動化でき、手早くプロジェクトをセットアップできます。サードパーティ製ツールとの連携も容易になります。 CircleCI Developer Hub の CircleCI Orb レジストリでは、設定作業の簡素化に役立つ Orb を検索できます。
AWSのECRのドキュメントに従って、コマンドを書いていくでもいいのですが、
特に要件とか気にしないなら、CircleCIのOrbに従うだけで、Build/Pushの処理を簡単に実装出来ます。
例えば、docker buildやdocker pushコマンドをガリガリ書かなくても、
引数を渡してメソッドを実行する感覚で、ECRへのPushまで出来てしまいます。
今回問題となったケース
Build資材がルートディレクトリには無く、サブディレクトリに存在するパターンです。
この場合、DockerfileのpathとBuild資材のPathをパラメータとして渡す必要があります。
aws-ecrのドキュメントを見てみると、以下のパラメータが渡せるようです。
- path: Path to the directory containing your Dockerfile and build context.
- build-path: Path to the directory containing your build context.
設定してみる。
構文チェックしてみると…
あれ、build-pathが渡せない…???
よくよくドキュメントを見てみると、
Jobs > build-and-push-image には、build-pathのパラメータが無い。
Commands > build-and-push-image には、build-pathのパラメータがある。
つまり、workflowからjobとして呼び出す際には、build-pathが指定できず、
jobからcommandとして呼び出さなければならないわけです。
解決策
jobからOrbのbuild-and-push-imageコマンドを呼び出します。
これならOKなわけですね。
これが分かるまで紆余曲折あったのですが、半日は潰しました。
おわりに
build-pathを渡せるようになったのもつい最近(v8.2.0から)です。
リリースノートに記載があります。
PRはこちら:https://github.com/CircleCI-Public/aws-ecr-orb/pull/251
This PR adds the build-path parameter to the docker-build-and-push-image command and job along with the build-image command. This enables users to specify the path of the build directory in the case that it differs from the path to the Dockerfile.
この PR は、build-image コマンドとともに、build-path パラメーターを docker-build-and-push-image コマンドとジョブに追加します。 これにより、ビルド ディレクトリのパスが Dockerfile へのパスと異なる場合に、ユーザーはそのパスを指定できます。
やっぱり同じ悩みを抱える方が居たんですね。
>This PR adds the build-path parameter to the docker-build-and-push-image command and job
Jobにも追加されているの?
動いてないような…?
Issue切るか。
ここまで読んでいただきありがとうございました。
追記 2023/09/23
以下のIssueがCloseされ、この問題は解決しているようです。
https://github.com/CircleCI-Public/aws-ecr-orb/issues/257
PR: https://github.com/CircleCI-Public/aws-ecr-orb/pull/276