【问题标题】:OpenShift Migration - ENV Variables In Conf File NOT Replaced As BeforeOpenShift 迁移 - 配置文件中的 ENV 变量没有像以前那样被替换
【发布时间】:2017-09-28 10:10:11
【问题描述】:

我正在将 Web 应用程序从 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" />

下一个部署成功了。

我的问题是:

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

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

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

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

【问题讨论】:

    标签: tomcat configuration openshift


    【解决方案1】:

    在 V2 中设置的特殊环境变量在 V3 中均未设置。对于 V3,也没有安装持久卷的标准位置,这取决于您将其安装在哪里。变量没有显示为被扩展可能仅仅是由于处理文件的任何过程,如果不存在这样的环境变量,则将其作为变量引用。这假定替换仍然发生在 V3 下,并且在 V2 中没有什么特别之处。

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

    【讨论】:

    • 感谢 Graham,但问题不在于环境变量,而在于它们的替换。 ${OPENSHIFT_DATA_DIR} 没有被正确替换,它被替换为:'/deployments/${OPENSHIFT_DATA_DIR}' 注意原始文本前面的'/deployments/'。我刚刚在我的系统上看到了一个 log4j.xml 文件,它有一个这样指定的环境变量:${env:OPENSHIFT_DATA_DIR} 所以我稍后再试一下......
    • 我现在可以确认 ${env:OPENSHIFT_DATA_DIR} 也没有被替换。我在日志中得到了这个:指定的主要资源集 [/deployments/${env:OPENSHIFT_DATA_DIR}/temp] 无效。
    【解决方案2】:

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

    基本上,您应该将.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 在最后一行。

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

    【讨论】:

    • 请注意。这个问题与设置环境变量无关。这是关于 server.xml 中的 ${OPENSHIFT_DATA_DIR} 不会被它的值替换的事实,它恰好是:/opt/app-root/data
    • @Lyndon 这是因为,从来没有这样的变量存在(我只是检查我的 tomcat 变量)。如果您想在执行之前创建此变量,请尝试此解决方案。请告诉我。
    • OpenShift 环境变量 OPENSHIFT_DATA_DIR 确实存在,我创建了它,它的值是 /opt/app-root/data。您会期望 docBase="${OPENSHIFT_DATA_DIR}/documents" 更改为 docBase="/opt/app-root/data/documents"。但它实际上已更改为:docBase="/deployments/${OPENSHIFT_DATA_DIR}/documents"。请注意添加到前面的“/部署”。恕我直言,这必须是一个错误......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2020-02-29
    • 2014-10-15
    • 1970-01-01
    相关资源
    最近更新 更多