2017-09-28 29 views
1

我正在將OpenShift v2的Web應用程序遷移到OpenShift Pro。這是一個常規的Java Tomcat應用程序。OpenShift遷移 - Conf文件中的ENV變量沒有像以前一樣替換

我在OpenShift V2 web應用已經額外的docBase在server.xml中指定這樣的:

 <Context docBase="${OPENSHIFT_DATA_DIR}/documents" path="/documents" /> 

在部署過程中的環境變量OPENSHIFT_DATA_DIR其值改爲:的/ opt /應用程序根/數據

正如你所期望的那樣。

我已經完成了在OpenShift Pro中設置的等效(儘管完全不同),但部署失敗。經過調查,我在日誌中看到這一點:

Caused by: java.lang.IllegalArgumentException: The main resource set specified [/deployments/${OPENSHIFT_DATA_DIR}/documents] is not valid 

爲了克服這一點,我只是硬編碼的/ opt /應用程序根/數據在server.xml中是這樣的:

<Context docBase="/opt/app-root/data/documents" path="/documents" /> 

下部署工作。

我的問題是:

這是在部署過程中的錯誤?

這是錯誤的方式來獲取注入配置文件的環境變量?

如果是這樣,那麼正確的方法是什麼?

任何幫助,將不勝感激,我不喜歡硬編碼的東西,它總是回來咬你在將來的某一天......

回答

0

沒有在V2中設置的特殊環境變量是在V3中設置。關於V3,還沒有一個標準的位置來指明持久卷的安裝方式,它取決於你在何處安裝它。該變量不顯示爲展開可能僅僅是由於該文件的任何進程,如果沒有這樣的環境變量存在,則將其作爲變量引用。這假定替換仍然發生在V3下,對V2來說並不是特別的。

如果你想保留環境變量以防萬一你想覆蓋它們,或者只是爲了避免改變需要它們的代碼,你可以在部署配置中設置環境變量,或者你可以在你的文件中添加一個.s2i/environment文件源代碼回購,並在其中添加環境設置。在構建時,.s2i/environment文件中的那些文件實際上已成爲應用程序映像的一部分。如果需要,它們可以稍後在部署配置中被環境變量覆蓋。

+0

謝謝格雷厄姆,但問題不是環境變量,而是他們的替代。 $ {OPENSHIFT_DATA_DIR}沒有被正確替換,它被替換爲:'/ deployments/$ {OPENSHIFT_DATA_DIR}'在原始文本前註釋'/ deployments /'。我剛剛在我的系統上看到了一個log4j.xml文件,它有一個如下所示的環境變量:$ {env:OPENSHIFT_DATA_DIR}所以我稍後再試一次... – Lyndon

+0

我現在可以確認$ {env :OPENSHIFT_DATA_DIR}也沒有被替換。我在日誌中得到了這個:指定的主資源集[/ deployments/$ {env:OPENSHIFT_DATA_DIR}/temp]無效。 – Lyndon

0

如果您要設置任何環境變量,請檢查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

  • 默認的運行腳本調用應該是最後一行。請不要指望控制器回來執行之後寫的任何內容。

+0

請注意。這個問題不是關於設置環境變量的。事實上,server.xml中的$ {OPENSHIFT_DATA_DIR}不會被它的值替換,它恰好是:/ opt/app-root/data – Lyndon

+0

@Lyndon這是因爲沒有這樣的變量存在(我只是檢查我的tomcat變量)。如果您想要在執行前創建此變量,請嘗試此解決方案。請告訴我。 – gyan

+0

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」。請注意添加到前面的'/ deployments'。這必須是一個錯誤恕我直言...... – Lyndon