使用環境變數

學習如何在 Code Engine 中使用環境變數 (env variables)。 您可以將環境變數設定為可由應用程式、工作或函式使用的鍵值對。

建立和更新環境變數

使用 Code Engine 建立和管理環境變數。

您可以將環境變數定義為字面值,也可以引用現有的機密或設定映射。Code Engine 使用環境變數,讓您的工作、應用程式或函式可以使用 機密設定映射

從控制台建立環境變數

使用 Code Engine 主控台建立和更新環境變數。

您可以在控制台建立或更新應用程式、工作或函式時定義環境變數。

開始之前

  • 您必須 建立專案,且 專案必須處於 active 狀態。
  • 確定您是否要建立字面上的環境變數,或是建立引用現有 secret 或 configmap 的環境變數。 如果您希望您的環境變數完全引用現有的秘訣或配置表,或引用現有秘訣或配置表中的個別金鑰,則該秘訣或配置表必須存在。 請參閱 建立機密建立配置表,在繼續之前定義您的機密或配置表。
  1. 要在新增環境變數頁面中開啟對話框定義環境變數,請完成下列其中一項選擇。

    • 如果您正在 建立應用程式,請從「建立應用程式」頁面,展開環境變數 (選用) 區段。 您可以在建立的應用程式中加入一個或多個環境變數。 按一下新增,開啟新增環境變數頁面。
    • 如果您正在 建立工作,請從建立工作頁面,展開環境變數 (選用) 區段。 按一下新增,開啟新增環境變數頁面。
    • 如果您正在 建立函數,請從建立函數頁面,展開環境變數 (選用) 區段。 按一下新增,開啟新增環境變數頁面。
    • 如果您要更新現有的工作負載以新增環境變數,請前往現有的應用程式、工作或函式。 從組態索引標籤,按一下環境變數。 對於應用程式、工作和功能,按一下新增環境變數,開啟新增環境變數頁面。
  2. 從新增環境變數頁面,以下列其中一種方式建立環境變數、

    • 若要建立_字面_環境變數,請選擇 Literal value,指定字面環境變數的名稱,並提供值。 注意 Resulting definition 部分顯示環境變數的名稱及其值。
    • 若要建立_完全引用 configmap 的_環境變數,請選擇 Reference full configmap,然後選擇現有的 configmap。 在這種情況下,所選 configmap 的所有按鍵都會作為環境變數的一部分被引用。 請注意 Resulting definition 區段會顯示 configmap 中鍵的名稱,但不會顯示 configmap 中引用的鍵的實際值。
    • 若要建立一個_引用已定義的 configmap 的個別 key_ 的環境變數,請選擇 Reference key in configmap,選擇您想要的現有 configmap,然後選擇要引用作為環境變數一部分的 key。 在您選取您要參考的 configmap 中的個別關鍵後,請注意 Resulting definition 區段會顯示在 configmap 中選取的關鍵名稱,但不會顯示在 configmap 中被參考的關鍵的實際值。
    • 若要建立_完全引用秘密的_環境變數,請選擇 Reference full secret,然後選擇現有的秘密。 在這種情況下,所選密碼的所有金鑰都會作為環境變數的一部分被引用。 請注意 Resulting definition 部分會顯示秘訣中金鑰的名稱,但不會顯示秘訣中引用的金鑰實際值。
    • 若要建立_引用已定義密碼的個別金鑰的_環境變數,請選擇 Reference key in secret,選取您想要的現有密碼,然後選擇要引用為環境變數一部分的金鑰。 在您選取秘密中要參考的個別金鑰後,請注意 Resulting definition 區段會顯示秘密中選取金鑰的名稱,但不會顯示秘密中參考的金鑰實際值。

    從控制台,每個環境變數只能引用一個已定義的 configmap 或 secret 的個別金鑰。 如果需要引用多個 configmap 或 secret 的 key,則重複步驟,定義另一個引用不同 key 的環境變數。

  3. 按一下「完成」儲存您的變更。 此動作可將您的環境變數新增到環境變數索引標籤的表格中。 若要繼續新增環境變數,請按一下新增

  4. 使用已定義的環境變數完成應用程式、工作或函式的建立或更新。

    • 如果您正在建立工作負載,當您按一下建立時,應用程式、工作或函式會與您的環境變數一起部署。
    • 如果您要更新現有的應用程式、工作或函式以新增環境變數,請按一下儲存並部署以更新應用程式,或按一下儲存以使用新環境變數更新工作或函式。
  5. 當您的應用程式、工作或函式處於 Ready 狀態時,它會更新您的環境變數。

下表說明您的環境變數資訊。

環境變數表
標頭 說明
Name 環境變數的名稱。
Defined by 指定環境變數是否為 literal 類型,或環境變數是否為完全引用的 configmap 或 secret,或是否引用 secret 或 configmap 的特定金鑰。
Value or reference 顯示字面值、完全引用的 configmap 或 secret,或 configmap 或 secret 的引用金鑰。

例如,讓我們建立一個應用程式,並為應用程式設定環境變數。

  1. 建立應用程式 命名為 myapp,它使用 icr.io/codeengine/codeengine 影像。 這個 hello-world 應用程式包含 TARGET 環境變數,應用程式會列印 Hello ${TARGET} from Code Engine 並列印環境變數清單。 如果 TARGET 環境變數為空,則會返回 Hello World from Code Engine
  2. 前往主控台中的此應用程式。
  3. 當應用程式處於 Ready 狀態時,您就可以測試您的應用程式。 按一下測試應用程式,然後按一下測試應用程式窗格中的傳送請求。 若要在網頁中開啟應用程式,請按一下應用程式 URLmyapp 應用程式會傳回 Hello World from Code Engine 回應,並列印此應用程式所包含的環境變數。
  4. 按一下環境變數標籤。
  5. 建立下列環境變數。
    • 按一下新增,開啟新增環境變數頁面,並建立_字面上的_環境變數。 例如,建立一個字面上的環境變數,名稱為 literalenvvar,值為 This is my literal。 按一下「完成」儲存您的變更。
    • 按一下 [ 新增 ],開啟 [新增環境變數] 頁面,並建立_完全引用 configmap_ 的環境變數。 在引用 configmap 之前,它必須存在。 在這個範例中,存在一個名為 mycolorconfigmap 的 configmap,其中包含以下的 key-value 對:key1=blue, key2=green,和 key3=yellow。 建立一個完全引用 mycolorconfigmap configmap 的環境變數,包括其所有的 key-value 對。 請注意 Resulting definition 區段會顯示 configmap 中鍵的名稱,但不會顯示 configmap 中引用的鍵的實際值。 按一下「完成」儲存您的變更。
    • 按一下新增,開啟新增環境變數頁面,並建立另一個環境變數,以_引用已定義秘 密的個別金鑰_。 在您引用秘密之前,它必須存在。 在這個範例中,存在一個名稱為 mynewsecret 的秘密,它包含以下的鍵值對:newsec1=mynewsecret1, newsec2=mynewsecret2,和 newsec3=mynewsecret3。 建立一個環境變數,引用 mynewsecret secret 的 newsec2 金鑰。 注意 Resulting definition 部分會顯示秘密中選擇的金鑰名稱,但不會顯示秘密中引用的金鑰實際值。 按一下「完成」儲存您的變更。
  6. 按一下「儲存並建立」,以新的環境變數更新應用程式。
  7. 當應用程式處於 Ready 狀態時,您的應用程式會更新環境變數。
  8. 若要測試您的應用程式,請按一下測試應用程式,然後按一下測試應用程式窗格中的傳送請求。 若要在網頁中開啟應用程式,請按一下應用程式 URL。 經此應用程式改版後,此應用程式會輸出 Hello World from Code Engine,輸出內容包括環境變數的名稱,這些變數是在之前的步驟中新增的。

當您在工作負載中設定環境變數時,此動作可新增環境變數或覆寫現有的環境變數。 如果您有相同_名稱_的環境變數,但指定的_值_與先前定義的環境變數不同,則更新後的環境變數會取代現有的值。 例如,如果您定義了一個名為 envvar1 且其值為 myenvar1 的環境變數,並且定義了另一個名為 envvar1 且指定其值為 mynewenvvar1 的環境變數,那麼在您儲存並部署更新的應用程式或儲存更新的工作後,您正在執行的應用程式或工作會使用 envvar1 且其值為 mynewenvvar1 的環境變數。

從控制台更新環境變數

  1. 若要更新現有的環境變數,請移至包含您要變更的環境變數的應用程式、工作或函式,然後按一下環境變數索引標籤以顯示環境變數表。
  2. 從環境變數表中,按一下要更新的環境變數。
  3. 從「編輯環境變數」頁面進行更新,然後按一下「完成」儲存變更。 編輯環境變數時,您可以變更 Defined by 值及其對應的必填欄位。
  4. 按一下「儲存並部署」,以根據變更部署應用程式;或按一下「儲存」,以根據變更執行工作。 當您的應用程式或工作處於 Ready 狀態時,您的應用程式或工作會根據您的環境變數進行更新。

使用 CLI 建立和更新環境變數

使用 Code Engine CLI 建立和管理環境變數。

您可以在使用 CLI 建立或更新應用程式、工作或函式時定義環境變數。

使用 CLI 建立環境變數時,可以參考 configmaps 或 secrets,也可以建立字面上的環境變數。 這些說明描述使用 CLI 建立和更新字面意義環境變數。

有關在 CLI 中以環境變數引用完整機密和設定映射、覆寫引用和移除引用的詳細情形,請參閱引用 機密和設定 映射。

開始之前

為您的應用程式建立和更新環境變數

為您的應用程式建立並更新環境變數,如下所示、

  • 若要為您的應用程式建立並設定環境變數,請使用 --env 選項與 app createapp update 指令使用 選項。 以下範例建立使用 icr.io/codeengine/codeengine 映像的 myapp 應用程式,並定義 envAenvB 環境變數。

    ibmcloud ce application create --name myapp --image icr.io/codeengine/codeengine --env envA=A --env envB=B
    
  • 若要更新現有應用程式的環境變數,請使用 --env 選項與 app update 指令來更新現有應用程式的環境變數。 以下範例更新 myapp 應用程式,以覆寫 envA 的值,並新增 envC 環境變數。

    ibmcloud ce application update --name myapp  --env envA=AA --env envC=C
    

為您的工作建立和更新環境變數

為您的工作設定和更新環境變數,如下所示、

  • 若要為您的工作建立並設定環境變數,請使用 --env 選項與 job create, job update, jobrun submitjobrun resubmit 指令。 以下範例建立使用 icr.io/codeengine/codeengine 映像的 myjob 作業,並定義 envA 環境變數。

    ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine --env envA=A
    
  • 若要更新現有工作的環境變數,請使用 --env 選項與 job update, jobrun submitjobrun resubmit 指令來更新現有工作的環境變數。

範例 1

以下範例更新 myjob 作業,以覆寫 envA 的值,並新增 envB 環境變數。

ibmcloud ce job update --name myjob  --env envA=AA --env envB=B

執行 job get 指令來顯示工作的詳細資訊,包括其環境變數。

ibmcloud ce job get --name myjob

輸出範例

Getting job 'myjob'...
OK

Name:          myjob
[...]
Environment Variables:
    Type     Name  Value
    Literal  envA  AA
    Literal  envB  B
Image:                  icr.io/codeengine/codeengine
[...]

範例 2

以下範例執行 myjob 作業,覆寫 envA 的值,並為此作業執行新增 envD 環境變數。

ibmcloud ce jobrun submit --job myjob  --name myjobrun1 --env envB=BB --env envC=C

執行 jobrun get 指令來顯示工作執行的詳細資訊,包括其環境變數。

ibmcloud ce jobrun get --name myjobrun1

輸出範例

[...]
Name:          myjobrun1
[...]
Job Ref:                myjob
Environment Variables:
    Type     Name  Value
    Literal  envA  AA
    Literal  envB  BB
    Literal  envC  C
Image:                  icr.io/codeengine/codeengine
[...]

Instances:
Name           Running  Status   Restarts  Age
myjobrun1-0-0  0/1      Succeeded  0         17s

為您的功能建立和更新環境變數

為您的函式設定和更新環境變數如下。

  • 要為您的函數建立並設定環境變數,請使用 --env 選項與 function createfunction update 指令使用。 以下範例建立使用 https://github.com/IBM/CodeEngine 原始碼的 myfunction 函式,並定義 envA 環境變數。

    ibmcloud ce function create --name myfunction --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs  --env envA=A
    

    命令的輸出範例 fn get 命令的輸出範例。

    Environment Variables:
    Type     Name  Value
    Literal  envA  A
    
  • 若要更新現有函式的環境變數,請使用 --env 選項與 function update 指令來更新現有函式的環境變數。 以下範例更新 myfunction 函式,以覆寫 envA 的值,並新增 envC 環境變數。

    ibmcloud ce fn update --name myfunction  --env envA=AA --env envC=C
    

    命令的輸出範例 fn get 命令的輸出範例。

    Environment Variables:
    Type     Name  Value
    Literal  envA  AA
    Literal  envC  C
    

使用環境變數更新工作負載的注意事項

當您更新具有引用 configmaps 或 secrets 的環境變數的應用程式、工作或函式時,請考慮下列資訊。

當您更新具有完全引用配置表 (或機密) 的環境變數的應用程式、工作或函式,使其完全引用不同的配置表 (或機密) 時,完全引用會以設定的順序覆寫其他完全引用 (最後一個引用的設定會覆寫第一個設定)。

當您更新一個應用程式、工作或函式,而該應用程式、工作或函式的環境變數引用一個 configmap (或 secret) 中的金鑰,以引用不同 configmap (或 secret) 中的相同金鑰時,則會使用最後一個引用的金鑰。

當您更新一個應用程式、工作或函式,而該應用程式、工作或函式的環境變數完全參照 configmap (或 secret) 以加入對特定金鑰的參照時,則特定金鑰參照會覆寫完整的 configmap (或 secret) 參照。

刪除環境變數

當您不再需要環境變數時,可以將它刪除。

從控制台刪除環境變數

  1. 從控制台,移至具有您要刪除的環境變數的應用程式、工作或函式。 按一下環境變數標籤。
  2. 從環境變數表中,刪除要從應用程式、工作或函式中移除的環境變數。
  3. 按一下「儲存並部署」以更新應用程式,或按一下「儲存」以使用新環境變數更新工作或函式。 當您的應用程式、工作或函式處於 Ready 狀態時,它會根據您目前的環境變數進行更新。

使用 CLI 刪除環境變數

當您使用 CLI 處理環境變數時,您可以參考現有的 configmaps 或 secrets,也可以處理字面上的環境變數。 這些指示說明如何使用 CLI 刪除字面意義上的環境變數。

如需移除 CLI 中對完整機密和配置表的引用的詳細方案,請參閱 引用機密和配置表

刪除應用程式的環境變數

若要移除應用程式的環境變數,請使用 --env-rm 選項與 app update 指令來移除環境變數。 以下範例更新 myapp 應用程式,刪除 envA 環境變數。

ibmcloud ce application update --name myapp --env-rm envA

刪除工作的環境變數

若要移除工作的環境變數,請使用 --env-rm 選項與 job updatejobrun resubmit 指令來移除環境變數。

使用 --env-rm 選項與 job update 指令來移除工作上設定的環境變數。 使用 --env-rm 選項和 jobrun resubmit 指令來移除指定工作執行時所設定的環境變數。

  • 以下範例更新 myjob 作業,刪除 envA 環境變數。

    ibmcloud ce job update --name myjob  --env-rm envA
    

    使用 job get 命令顯示工作的詳細資訊,包括其環境變數。

  • 以下範例重新提交 myjobrun1 作業執行,並刪除 envC 環境變數。

    ibmcloud ce jobrun resubmit --jobrun myjobrun1  --name jobrun2resuba--env-rm envC
    

    執行 jobrun get 指令來顯示工作執行的詳細資訊,包括其環境變數。

    ibmcloud ce jobrun get --name jobrun2resuba
    

    輸出範例

    Getting jobrun 'jobrun2resuba'...
    Getting instances of jobrun 'jobrun2resuba'...
    Getting events of jobrun 'jobrun2resuba'...
    [...]
    
    Name:          jobrun2resuba
    [...]
    Job Ref:                myjob
    Environment Variables:
        Type     Name  Value
        Literal  envB  BB
    Image:                  icr.io/codeengine/codeengine
    [...]
    
    Instances:
    Name               Running  Status     Restarts  Age
    jobrun2resuba-0-0  0/1      Succeeded  0         21s
    

刪除功能的環境變數

若要移除函數的環境變數,請使用 --env-rm 選項與 function update 指令來移除環境變數。 以下範例更新 myfunction 函式,刪除 envA 環境變數。

ibmcloud ce function update --name myfunction --env-rm envA