OpenShift迁移 - ENV变量在CONF文件不被替换以前一样(OpenShift Migr

2019-09-29 02:35发布

我从迁移V2 OpenShift web应用程序到OpenShift临。 这是一个普通的Java应用程序的Tomcat。

我在OpenShift V2的webapp曾在server.xml中像这样指定一个额外的docBase:

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

/选择/应用根/数据 :在部署期间将环境变量OPENSHIFT_DATA_DIR用其值代替

正如你所期望的。

我也做了相当的(虽然是很不同)在OpenShift专业设置,但部署失败。 经过调查,我在日志中看到这一点:

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

为了克服这一点,我在这样的server.xml只是硬编码的/ opt /应用程序根/数据

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

接下来的部署工作。

我的问题是:

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

这是错误的方式来获得注入到配置文件中的环境变量?

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

任何帮助,将不胜感激,我不喜欢硬编码的东西,它总是回来在将来的某一天咬你...

Answer 1:

在V2中设置的特殊环境变量都不是在V3设置。 关于V3的,也没有固定的位置,一个持久的卷装,它是那种给你,你安装它。 该变量不被显示为扩大可能仅仅是由于任何处理文件,把它当作变量引用,如果没有这样的环境变量存在。 这假设替代仍然V3下发生的,并没有什么特殊V2。

如果你想保留的情况下,要覆盖他们,或者只是为了避免改变需要它们的代码的环境变量,你可以在部署配置设置环境变量,或者你可以添加一个.s2i/environment在源文件代码回购和在其添加环境设置来代替。 那些在.s2i/environment文件实际上已经成为应用图像的一部分时所建。 他们可以稍后在部署配置环境变量,如果需要,可以覆盖。



Answer 2:

如果你正在寻找设置任何环境变量,请这个和这个(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中的最后一行。

  • 默认运行脚本调用应该是最后一道防线。 请不要指望控制回过头来执行任何后写的。



文章来源: OpenShift Migration - ENV Variables In Conf File NOT Replaced As Before