Maven POM中的OpenShift访问环境变量

时间:2014-03-14 03:56:06

标签: openshift

我尝试在application-config.xml或POM.xml中访问OpenShift环境变量失败

application-config.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时访问env varilabes?

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

Jenkins不知道环境变量。

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

考虑运行时配置。

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

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

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

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

答案 2 :(得分:0)

我最近有类似的情况:

  1. 使用rhc client
  2. 为Openshift应用程序设置了环境变量
  3. 此变量对于用户登录SSH
  4. 是可见的

    1. 从Jenkins运行start操作挂钩脚本时,该变量不可见
    2. 对于使用echo $MY_NEW_VARIABLE的测试Jenkins作业,它也是空的
    3. 我需要承认我有DIY node的自定义Openshift配置,但也许对某人有帮助。

      解决方案是在节点配置中重新连接从属设备(不同比标记节点脱机)

      Disconnect Jenkins node

      Re-launch Jenkins node