Reputation: 2607
Will OpenShift build parameters (with the OpenShift Docker build strategy) be automatically exposed to Dockerfiles
as Docker build arguments (ARG
) or environment variables (ENV
), or does this need explicit configuration in a BuildConfig
e.g. in these places:
oc explain bc.spec.strategy.dockerStrategy.buildArgs
oc explain bc.spec.strategy.dockerStrategy.env
The reason I'm asking is that I have a template with several parameters, no explicit configuration yet, but an apparent situation where some parameters are accessible inside the Dockerfile (as $VAR)
and others are not ($VAR
is empty). I would like to understand normal behavior, before I debug my situation further.
UPDATE I've now added a oc explain bc.spec.strategy.dockerStrategy.buildArgs
section for the "missing" parameter to the template like so:
strategy:
type: Docker
dockerStrategy:
buildArgs:
- name: VAR
value: ${VAR}
but its value is still empty inside the built container when I would have expected it to be true
(because I started the build with oc new-app ... VAR=true
. So something else must be wrong too.
Upvotes: 1
Views: 1206
Reputation: 2607
This turned out to be a side-effect of my perhaps particular way of employing OpenShift's Docker build strategy.
I maintain a separate Dockerfile
in a file and use a script patch.sh
for inserting it into the uploaded template. This is convenient, because a Dockerfile
stored in oc explain bc.spec.source.dockerfile
needs certain escaping (in YAML representation) and the script takes care of this. If I must update the Dockerfile
(as happens frequently during development) I just edit the file using verbatim Dockerfile
syntax and then re-run the script.
The script also takes care of removing certain argument definitions from the Dockerfile
(e.g. ARG VAR
) and replacing references to them with references to corresponding OpenShift template parameters (e.g. $VAR
to ${VAR}
). The idea is for the script to turn a Dockerfile
that would also be suitable for a stand-along Docker environment into one that can serve OpenShift's Docker build strategy with template parallelization.
The actual error occurred because I had added a new template parameter but not jet adjusted the script accordingly. The situation is now back to normal.
UPDATE I've now removed the special logic for manipulating arguments from my patch script and introduced build arguments under bc.spec.strategy.dockerStrategy.buildArgs
instead. Entries look like this:
buildArgs:
- name: VAR
value: ${VAR}
So basically, now the build configuration does the copying (instead of my patch script the substitution).
Upvotes: 1