OpenShift构建参数(采用OpenShift Docker构建策略)是否将自动作为Docker构建参数(Dockerfiles
或环境变量(ARG
)公开给ENV
,还是这样做? BuildConfig
中的显式配置,例如在这些地方:
oc explain bc.spec.strategy.dockerStrategy.buildArgs
oc explain bc.spec.strategy.dockerStrategy.env
我要问的原因是我有一个带有几个参数的模板,还没有显式配置,但是很明显的情况是,某些参数可以在Dockerfile内部访问(如$VAR)
,而其他参数则不能({{ 1}}是空的。在进一步调试情况之前,我想了解正常的行为。
更新,我现在为模板的“缺少”参数添加了一个$VAR
部分,如下所示:
oc explain bc.spec.strategy.dockerStrategy.buildArgs
,但是当我希望它是strategy:
type: Docker
dockerStrategy:
buildArgs:
- name: VAR
value: ${VAR}
时,它的值在构建的容器中仍然是空的(因为我是从true
开始构建的。因此,某些其他地方也一定是错误的。
答案 0 :(得分:0)
事实证明,这是我采用OpenShift Docker构建策略的特定方式的副作用。
我在文件中维护单独的Dockerfile
,并使用脚本patch.sh
将其插入上载的模板中。这很方便,因为存储在Dockerfile
中的oc explain bc.spec.source.dockerfile
需要进行某些转义(以YAML表示),并且脚本会对此进行处理。如果必须更新Dockerfile
(在开发过程中经常发生),我只需要使用逐字Dockerfile
语法编辑文件,然后重新运行脚本即可。
脚本还负责从Dockerfile
(例如ARG VAR
)中删除某些参数定义,并用对相应的OpenShift模板参数(例如$VAR
至{{ 1}})。这个想法是为了使脚本将${VAR}
(也适用于独立的Docker环境)转变为可以通过模板并行化为OpenShift的Docker构建策略提供服务的环境。
发生实际错误是因为我添加了一个新的模板参数,但没有相应地调整脚本。现在情况恢复正常。
更新现在,我从补丁脚本中删除了用于处理参数的特殊逻辑,并在Dockerfile
下引入了构建参数。条目看起来像这样:
bc.spec.strategy.dockerStrategy.buildArgs
因此,基本上,现在构建配置会进行复制(而不是用我的补丁脚本进行复制)。