Переменные среды доступа OpenShift в Maven POM

Я безуспешно пытался получить доступ к переменным среды OpenShift либо в application-config.xml, либо в POM.xml.

приложение-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?


person pavan    schedule 14.03.2014    source источник
comment
У меня нет времени проверять это, но возможно ли, что эти переменные среды недоступны в Jenkins OpenShift? Обратите внимание, что интеграционный тест выполняется на другом механизме с именем ‹appname›bldr.   -  person Christian Strempfer    schedule 15.03.2014
comment
@ Крис, я пришел к тому же выводу, что и ты; поэтому, вероятно, мне придется перефразировать свой вопрос - как мы можем сделать переменные среды доступными для экземпляра Jenkin или ‹appName›bldr?   -  person pavan    schedule 15.03.2014


Ответы (3)


Кстати, ни один из этих вопросов не относится к OpenShift.

Но чтобы ответить на первую часть вашего вопроса, вы должны знать, что Spring по умолчанию не разрешает переменные среды, но вы можете включить PropertyPlaceholderConfigurer в своем файле конфигурации, чтобы исправить это.

Чтобы ответить на ваш второй вопрос, посмотрите здесь Как ссылаться на переменную среды в POM .xml?

person MartinB    schedule 14.03.2014
comment
Я понимаю, что spring не разрешает свойства, однако OpenShift использует Jenkins для создания сборки и последующего развертывания сборки на своей платформе. Я ожидаю, что их процесс сборки заменит переменные среды в POM. Как вы указали ссылку, я упомянул переменные среды как ${env.XXXXXXXX} ; Openshift Jenkins при создании процесса сборки не заменяет переменные env, как ожидалось. - person pavan; 15.03.2014
comment
Ваше утверждение об Openshift неверно, оно использует стандартный maven для создания и развертывания java-приложений. Использование Jenkins не является обязательным. Пожалуйста, измените название этой проблемы - person MartinB; 16.03.2014

Дженкинс не знает переменных среды.

Эти переменные среды недоступны на шестернях Jenkins, они существуют только на «прикладной шестерне» с подключенной базой данных.

Учитывайте конфигурации времени выполнения.

Вы пытаетесь жестко закодировать параметры базы данных в своем артефакте развертывания. Это может быть недостатком. Например, если вы выполняете развертывание в разных средах для тестирования и производства, вам придется создавать приложение несколько раз. Поэтому вы должны решить, является ли это проблемой для вас. Если это так, вы можете легко читать переменные среды из своего Java-приложения.

Вы должны установить переменные среды самостоятельно.

Нет простого способа получить доступ к переменным среды другого механизма, поэтому вам нужно установить их самостоятельно (или жестко закодировать их в вашем pom.xml, что является плохой практикой, по крайней мере, для паролей).

См. статью базы знаний Как сделать Я подключаю несколько приложений к одной базе данных? для подтверждения того, что возможно только жесткое программирование.

person Christian Strempfer    schedule 15.03.2014
comment
Я создал профиль для каждой среды, аналогичный описанному в ссылке. Одно из моих намерений состоит в том, чтобы избежать добавления переменных OpenShift в приложение; Я хочу объединить переменные среды в профиле развертывания, чтобы было легко изменять/управлять местом развертывания. - person pavan; 15.03.2014
comment
@pavan: автор жестко задает параметры базы данных в pom.xml, но вы хотите этого избежать. Поэтому вам нужно прочитать переменные среды во время выполнения или установить переменные среды на jenkins. - person Christian Strempfer; 15.03.2014

Недавно у меня была похожая ситуация:

  1. Для приложения Openshift была установлена ​​переменная среды с клиент rhc
  2. Эта переменная была видна пользователю, выполнившему вход через SSH.

но

  1. При запуске скрипта start действия от Jenkins переменная не была видна
  2. Для тестовой работы Дженкинса с echo $MY_NEW_VARIABLE он также был пуст.

Я должен признать, что у меня есть собственная конфигурация Openshift узла DIY., но, возможно, это будет кому-то полезно.

Решение состояло в том, чтобы переподключить ведомое устройство в конфигурации узла (это нечто отличное от пометки узла в автономном режиме):

Отключить узел Дженкинса

Перезапустить узел Jenkins

person Witek    schedule 12.03.2017