OpenShift迁移 - Conf File中的ENV变量未像以前那样替换



我将WebApp从OpenShift V2迁移到OpenShift Pro。这是一个常规的Java tomcat应用。

我在openshift v2上的WebApp在server.xml中指定了一个其他docbase:

        <Context docBase="${OPENSHIFT_DATA_DIR}/documents" path="/documents" />

在部署期间,环境变量 openshift_data_dir 被其值替换为:/opt/opt/app-root/data

正如您所期望的那样。

我完成了OpenShift Pro中设置的等效(尽管完全不同),但部署失败了。在调查后,我在日志中看到了这一点:

Caused by: java.lang.IllegalArgumentException: The main resource set specified [/deployments/${OPENSHIFT_DATA_DIR}/documents] is not valid

要克服这一点,我只是硬编码/opt/app-root/data 在server.xml中类似:

<Context docBase="/opt/app-root/data/documents" path="/documents" />

下一个部署工作。

我的问题是:

这是部署过程中的错误吗?

这是将环境变量注入配置文件的错误方法?

如果是,正确的方法是什么?

任何帮助都将不胜感激,我不喜欢硬编码,它总是会在以后的日期咬住您...

v2中设置的特殊环境变量都不是在v3中设置的。就V3而言,也没有标准位置可以安装持续的音量,这取决于您安装的位置。该变量不显示为扩展,可能仅仅是由于文件的任何过程,如果不存在此类环境变量,则将其作为变量参考。这假定替代仍然存在于V3下,并且对V2并不是什么特别的。

如果要保留环境变量,以防万一要覆盖它们,或者只是为了避免更改需要它们的代码,则可以在部署配置中设置环境变量,也可以在源中添加.s2i/environment文件代码回购并在其中添加环境设置。构建时,.s2i/environment文件中的那些实际上是应用程序图像的一部分。稍后,如果需要,则可以在部署配置中的环境变量覆盖它们。

如果要设置任何环境变量,请检查此和此(S2I脚本部分)。

基本上,您应该将.s2i/bin文件夹引入代码库,该文件夹可以覆盖多个脚本并介绍任何自定义代码。这类似于V2中的动作钩。

在这里,您可能希望在实际运行之前介绍setting environment variable。例如

.s2i/bin/run script
#!/bin/bash
echo "Set environment variable before running application"
exec /usr/libexec/s2i/run

有几件事要小心:

  • 通过介绍您的脚本,它是完全覆盖的。如果您想在代码之后调用标准运行脚本,则必须调用该脚本。例如/usr/libexec/s2i/run在最后一行。

  • 默认运行脚本调用应该是最后一行。请不要指望控件在此之后恢复执行任何内容。

最新更新