DockerfileのARGを使ってイメージをビルドするときに、環境変数をARGに渡すことができます。これをJenkins-Xでのイメージビルドステップでやれないかと思い、いろいろ試してみたのですが、結局できませんでした。
Jenkins-Xの開発環境(jx bootで作成したもの)でkanikoを使用する設定になっていた場合、イメージのビルドにはkanikoが直接使用されてskaffoldは使用されない、とここに書いてありました。jx importなどでskaffold.yamlが作られるので、skaffoldが使われていると思っていたら違っているようです(このファイルは無視される)。skaffoldだと、DockerfileのARGに環境変数を渡せるのですが、残念ながら渡せないようです。無理やりパイプラインで環境変数をARGに渡したい場合は、sedなどでDockerfileを直接書き換えるステップを追加するとか、くらいしか思いつかないのですが、スマートではないですね。
ちなみにbuildpackのパイプラインでは、しっかりskaffoldのコマンドが書いてあるのでskaffoldが使われると思っていたのですが、jx step syntax effective というコマンドで実際に実行されるパイプラインのbuild-container-buildステップを確認したところ、以下のようにkanikoのコマンドに置き換えられていました。
- args:
- --cache=true
- --cache-dir=/workspace
- --context=/workspace/source
- --dockerfile=/workspace/source/Dockerfile
- --destination=registry.mydomain.com/myname/myapp:${inputs.params.version}
- --cache-repo=registry.mydomain.com/todo/cache
- --skip-tls-verify-registry=registry.mydomain.com
command: /kaniko/executor
dir: /workspace/source
image: gcr.io/kaniko-project/executor:v0.22.0
name: build-container-build