【问题标题】:OpenShift access environment variables in Maven POMOpenShift 访问 Maven POM 中的环境变量
【发布时间】:2017-03-12 09:10:45
【问题描述】:

我尝试在 application-config.xml 或 POM.xml 中访问 OpenShift 环境变量,但均未成功

应用程序配置.xml

 <mongo:db-factory id="mongoDbFactory" mongo-ref="mongo"                 
    dbname="testMongoDb"
        username="${OPENSHIFT_MONGODB_DB_USERNAME}"
                  password="${OPENSHIFT_MONGODB_DB_PASSWORD}"
                  />

POM.xml

<properties>
              <db.userName>${env.OPENSHIFT_MONGODB_DB_USERNAME}</db.userName>
              <db.password>${env.OPENSHIFT_MONGODB_DB_PASSWORD}</db.password>
              <db.url>mongodburl.openshift.com</db.url>
              <db.port>99999</db.port>
            </properties>
            <build>
                <finalName>testFinalName</finalName>
                <resources>
                    <resource>
                        <directory>src/main/resources/</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>

以上选项均无效。有没有人能够在部署到 Openshift 时访问环境变量?

【问题讨论】:

  • 我没有时间检查它,但是这些环境变量是否可能在 OpenShift 的 Jenkins 上不可用?请注意,集成测试正在另一个名为 bldr. 的设备上运行
  • @Chris 我得出了和你一样的结论;所以我可能不得不重新提出我的问题 - 我们如何使环境变量可用于 Jenkins 或 bldr 实例?

标签: openshift


【解决方案1】:

顺便说一句,这些都不是 OpenShift 问题。

但要回答您问题的第一部分,您应该知道 Spring 默认情况下不会解析环境变量,但您可以在配置文件中启用 PropertyPlaceholderConfigurer 来解决此问题。

要回答你的第二个问题,请看这里How to refer environment variable in POM.xml?

【讨论】:

  • 我知道 spring 不能解析属性,但是 OpenShift 使用 Jenkins 创建构建并随后将构建部署到他们的平台。我期待他们的构建过程将替换 POM 中的环境变量。正如您链接指出的那样,我将环境变量称为 ${env.XXXXXXXX} ; Openshift Jenkins 在创建构建过程时没有按预期替换环境变量。
  • 您关于 Openshift 的说法不正确,它使用标准 maven 构建和部署 java 应用程序。 Jenkins 的使用是可选的。请更改此问题的名称
【解决方案2】:

Jenkins 不知道环境变量。

这些环境变量在 Jenkins 设备上不可用,它们只存在于具有连接数据库的“应用程序设备”上。

考虑运行时配置。

您正在尝试对部署工件中的数据库设置进行硬编码。这可能是一个劣势。例如,如果您部署到不同的环境进行测试和生产,则必须多次构建应用程序。因此,您应该决定这对您来说是否有问题。如果是,您可以轻松地从 Java 应用程序中读取环境变量。

您必须自己设置环境变量。

没有简单的方法可以访问其他设备的环境变量,因此您必须自己设置它们(或在 pom.xml 中对其进行硬编码,至少对于密码而言这是不好的做法)。

请参阅知识文章How do I connect multiple applications to one database? 以确认只能进行硬编码。

【讨论】:

  • 我为每个环境创建了类似于link 描述的配置文件。我的意图之一是避免将 OpenShift 变量爬到应用程序中。我想在部署配置文件中整合环境变量,以便轻松更改/管理部署位置。
  • @pavan:作者在 pom.xml 中硬编码数据库参数,但你想避免它。因此需要在运行时读取环境变量或者在jenkins上设置环境变量。
【解决方案3】:

我最近也有类似的情况:

  1. 为 Openshift 应用程序设置了环境变量rhc client
  2. 此变量对通过 SSH 登录的用户可见

但是

  1. 从 Jenkins 运行 start 操作挂钩脚本时,变量不可见
  2. 对于使用 echo $MY_NEW_VARIABLE 的 Jenkins 测试作业,它也是空的

我需要承认我有一个 DIY node 的自定义 Openshift 配置,但也许它会对某人有所帮助。

解决方案是在节点配置中重新连接从站(这与将节点标记为离线不同):

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2014-02-21
    • 2018-10-18
    • 2012-12-11
    • 2013-01-23
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多