Tomcat OpenShift迁移-Conf文件中的ENV变量没有像以前一样被替换
我正在将一个webapp从OpenShift v2迁移到OpenShift Pro。这是一个普通的JavaTomcat应用程序 OpenShift v2上的我的webapp在server.xml中指定了一个额外的docBase,如下所示:Tomcat OpenShift迁移-Conf文件中的ENV变量没有像以前一样被替换,tomcat,configuration,openshift,Tomcat,Configuration,Openshift,我正在将一个webapp从OpenShift v2迁移到OpenShift Pro。这是一个普通的JavaTomcat应用程序 OpenShift v2上的我的webapp在server.xml中指定了一个额外的docBase,如下所示: <Context docBase="${OPENSHIFT_DATA_DIR}/documents" path="/documents" /> <Context docBase="/opt/app-root/data/doc
<Context docBase="${OPENSHIFT_DATA_DIR}/documents" path="/documents" />
<Context docBase="/opt/app-root/data/documents" path="/documents" />
为了克服这个问题,我只需在server.xml中硬编码/opt/app root/data,如下所示:
<Context docBase="${OPENSHIFT_DATA_DIR}/documents" path="/documents" />
<Context docBase="/opt/app-root/data/documents" path="/documents" />
下一次部署成功了
我的问题是:
这是部署过程中的错误吗?
这是将环境变量注入配置文件的错误方法吗?
如果是,正确的方法是什么?
任何帮助都将不胜感激,我不喜欢硬编码的东西,它总是在将来的某个日期回来咬你…V2中设置的特殊环境变量都没有在V3中设置。关于V3,也没有安装持久卷的标准位置,安装位置取决于您。变量未显示为展开可能只是由于文件的任何处理,如果不存在这样的环境变量,则将其保留为变量引用。这假定替换仍然发生在V3下,并且V2没有什么特别之处
如果要保留环境变量以防覆盖它们,或者只是为了避免更改需要它们的代码,可以在部署配置中设置环境变量,或者可以在源代码repo中添加
.s2i/environment
文件,并在其中添加环境设置。.s2i/environment
文件中的文件在构建时实际上成为应用程序映像的一部分。如果需要,它们可以稍后由部署配置中的环境变量覆盖 V2中设置的特殊环境变量均未在V3中设置。关于V3,也没有安装持久卷的标准位置,安装位置取决于您。变量未显示为展开可能只是由于文件的任何处理,如果不存在这样的环境变量,则将其保留为变量引用。这假定替换仍然发生在V3下,并且V2没有什么特别之处
如果要保留环境变量以防覆盖它们,或者只是为了避免更改需要它们的代码,可以在部署配置中设置环境变量,或者可以在源代码repo中添加
.s2i/environment
文件,并在其中添加环境设置。.s2i/environment
文件中的文件在构建时实际上成为应用程序映像的一部分。如果需要,它们可以稍后由部署配置中的环境变量覆盖 如果您希望设置任何环境变量,请检查并
基本上,您应该在代码库中引入.s2i/bin
文件夹,它可以覆盖多组脚本并引入任何自定义代码。这与V2中的动作挂钩类似
在这里,您可能希望在实际运行之前引入设置环境变量
。e、 g
.s2i/bin/run script
#!/bin/bash
echo "Set environment variable before running application"
exec /usr/libexec/s2i/run
有几件事需要注意:
- 通过引入脚本,它将被完全覆盖。若您希望在代码之后调用标准运行脚本,则必须调用该脚本。e、 g.
在最后一行/usr/libexec/s2i/run
- 默认运行脚本调用应该是最后一行。请不要期望控件返回来执行此后写入的任何内容
.s2i/bin
文件夹,它可以覆盖多组脚本并引入任何自定义代码。这与V2中的动作挂钩类似
在这里,您可能希望在实际运行之前引入设置环境变量
。e、 g
.s2i/bin/run script
#!/bin/bash
echo "Set environment variable before running application"
exec /usr/libexec/s2i/run
有几件事需要注意:
- 通过引入脚本,它将被完全覆盖。若您希望在代码之后调用标准运行脚本,则必须调用该脚本。e、 g.
在最后一行/usr/libexec/s2i/run
- 默认运行脚本调用应该是最后一行。请不要期望控件返回来执行此后写入的任何内容