我将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
在最后一行。默认运行脚本调用应该是最后一行。请不要指望控件在此之后恢复执行任何内容。