OpenShift迁移 - Conf文件中的ENV变量未替换为之前

时间:2017-09-28 10:10:11

标签: tomcat configuration openshift

我正在将一个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 / app-root / data

正如您所期望的那样。

我在OpenShift Pro中设置了相同的(虽然完全不同),但部署失败了。经过调查,我在日志中看到了这一点:

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

为了解决这个问题,我只是在server.xml中硬编码 / opt / app-root / data ,如下所示:

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

下一次部署有效。

我的问题是:

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

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

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

任何帮助都会受到赞赏,我不喜欢硬编码的东西,它总会在未来的某个日期回来咬你...

2 个答案:

答案 0 :(得分:0)

V2中设置的特殊环境变量都没有在V3中设置。对于V3,也没有安装持久卷的标准位置,它取决于您安装它的位置。该变量未显示为展开可能仅仅是由于文件的任何处理,如果不存在这样的环境变量,则将其保留为变量引用。这假设替换仍然在V3下发生,并且对于V2来说并不是特别的。

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

答案 1 :(得分:0)

如果您要设置任何环境变量,请检查thisthis (s2i script section)

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

在这里,您可能希望在实际运行之前引入setting environment variable。 e.g。

.s2i/bin/run script

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

很少有事要注意:

  • 通过引入您的脚本,它被完全覆盖。如果您希望在代码后调用标准运行脚本,则必须调用该脚本。例如最后一行/usr/libexec/s2i/run

  • 默认运行脚本调用应该是最后一行。请不要指望控件回来执行之后写的任何内容。