Maven POM中的OpenShift访问环境变量

Maven POM中的OpenShift访问环境变量,openshift,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}"

我尝试在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>

${env.OPENSHIFT\u MONGODB\u DB\u USERNAME}
${env.OPENSHIFT\u MONGODB\u DB\u PASSWORD}
mongodburl.openshift.com
99999
测试最终名称
src/main/resources/
真的

上述选项都不起作用。在部署到Openshift时,有人能够访问环境变量吗?

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

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


要回答第二个问题,请看这里

詹金斯不知道环境变量。

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

考虑运行时配置。

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

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

访问另一个gear的环境变量没有简单的方法,所以您必须自己设置它们(或者在pom.xml中硬编码它们,这至少对于密码来说是一种糟糕的做法)


请参阅知识文章以确认只有硬编码是可能的。

我最近也遇到过类似情况:

  • 已使用为Openshift应用程序设置环境变量
  • 此变量对于通过SSH登录的用户可见
  • 但是

  • 从Jenkins运行
    start
    action hook脚本时,变量不可见
  • 对于带有
    echo$MY_NEW_变量的test Jenkins作业
    它也是空的
  • 我需要承认,我有一个自定义的Openshift配置,但它可能会对某些人有所帮助

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


    我知道spring不会解析属性,但是OpenShift使用Jenkins创建构建,然后将构建部署到他们的平台上。我希望他们的构建过程将替换POM中的环境变量。正如您所指出的,我将环境变量称为${env.XXXXXXXX};Openshift Jenkins在创建构建过程时,它并没有像预期的那样替换环境变量。您关于Openshift的陈述不正确,它使用标准maven来构建和部署java应用程序。詹金斯的使用是可选的。请更改此问题的名称我没有时间检查,但这些环境变量是否可能在OpenShift的Jenkins上不可用?请注意,集成测试正在另一个名为bldr的设备上运行。@Chris我得出了与您相同的结论;所以我可能不得不重新表述我的问题-我们如何使环境变量可用于Jenkin或bldr实例?我已经为每个环境创建了类似于所述的配置文件。我的意图之一是避免将OpenShift变量悄悄地添加到应用程序中;我想在部署配置文件中合并环境变量,以便轻松更改/管理部署位置。@pavan:作者正在pom.xml中硬编码数据库参数,但您希望避免这样做。因此,您需要在运行时读取环境变量或在jenkins上设置环境变量。