IBM Cloud Docs
使用环境变量

使用环境变量

了解如何在 Code Engine中使用环境变量 (env variables)。 您可以将环境变量设置为可供应用程序,作业或函数使用的键/值对。

创建和更新环境变量

使用 Code Engine创建和管理环境变量。

您可以将环境变量定义为字面值,也可以引用现有私钥或 configmap。Code Engine 使用环境变量使作业,应用程序或函数能够使用 私钥configmaps

从控制台创建环境变量

使用 Code Engine 控制台创建和更新环境变量。

您可以在控制台中创建或更新应用程序,作业或功能时定义环境变量。

准备工作

  • 您必须 创建项目,并且 项目 必须处于 active 状态。
  • 确定是要创建字面值环境变量,还是要创建引用现有私钥或 configmap 的环境变量。 如果您希望环境变量完全引用现有私钥或 configmap,或者引用现有私钥或 configmap 中的各个密钥,那么该私钥或 configmap 必须存在。 请参阅 创建私钥创建 configmap 以定义私钥或 configmap,然后再继续操作。
  1. 要打开对话框以在“添加环境变量”页面上定义环境变量,请完成下列其中一个选项。

    • 如果要 创建应用程序,请从“创建应用程序”页面展开 环境变量 (可选) 部分。 您可以将一个或多个环境变量添加到要创建的应用程序。 单击 添加 以打开“添加环境变量”页面。
    • 如果要 创建作业,请从“创建作业”页面展开 环境变量 (可选) 部分。 单击 添加 以打开“添加环境变量”页面。
    • 如果要 创建函数,请从“创建函数”页面展开 环境变量 (可选) 部分。 单击 添加 以打开“添加环境变量”页面。
    • 如果要更新现有工作负载以添加环境变量,请转至现有应用程序,作业或函数。 从“配置”选项卡中,单击 环境变量。 对于应用程序,作业和函数,单击 添加环境变量 以打开“添加环境变量”页面。
  2. 从“添加环境变量”页面中,通过下列其中一种方式创建环境变量:

    • 要创建 文字 环境变量,请选择 Literal value,指定文字环境变量的名称,然后提供值。 请注意,Resulting definition 部分显示环境变量的名称及其值。
    • 要创建 _完全引用 configmap_的环境变量,请选择 Reference full configmap,然后选择现有 configmap。 对于此情况,所选 configmap 的所有键都将作为环境变量的一部分进行引用。 请注意,Resulting definition 部分显示 configmap 中键的名称,但不显示 configmap 中引用的键的实际值。
    • 要创建 _引用已定义 configmap 的单个键_的环境变量,请选择 Reference key in configmap,选择所需的现有 configmap,然后选择要作为环境变量的一部分引用的键。 在您选择要引用的 configmap 中的个别键后,请注意,Resulting definition 部分会在 configmap 中显示所选键的名称,但不会显示 configmap 中引用的键的实际值。
    • 要创建 _完全引用私钥_的环境变量,请选择 Reference full secret,然后选择现有私钥。 对于此情况,所选私钥的所有密钥都将作为环境变量的一部分进行引用。 请注意,Resulting definition 部分显示私钥中的密钥名称,但不显示私钥中引用的密钥的实际值。
    • 要创建 _引用已定义私钥的单个密钥_的环境变量,请选择 Reference key in secret,选择所需的现有私钥,然后选择要作为环境变量的一部分引用的密钥。 在选择要引用的私钥中的个别密钥后,请注意,Resulting definition 部分会显示私钥中所选密钥的名称,但不会显示私钥中引用的密钥的实际值。

    在控制台中,每个环境变量只能引用已定义的 configmap 或私钥的一个单独密钥。 如果需要引用 configmap 或 secret 的多个密钥,请重复这些步骤以定义另一个引用另一个密钥的环境变量。

  3. 单击“**完成 **”保存更改。 此操作会将环境变量添加到 环境变量 选项卡上的表中。 要继续添加环境变量,请单击 添加

  4. 使用定义的环境变量完成应用程序,作业或函数的创建或更新。

    • 如果要创建工作负载,那么单击 创建时,将使用环境变量来部署应用程序,作业或函数。
    • 如果要更新现有应用程序,作业或函数以添加环境变量,请单击 保存并部署 以更新应用程序,或者单击 保存 以使用新的环境变量更新作业或函数。
  5. 当应用程序,作业或功能处于 Ready 状态时,将使用环境变量对其进行更新。

下表描述了有关环境变量的信息。

环境变量表
标题 描述
Name 环境变量的名称。
Defined by 指定环境变量是 literal 类型,还是环境变量是完全引用的 configmap 或 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,它包含以下键/值对: key1=bluekey2=greenkey3=yellow。 创建完全引用 mycolorconfigmap configmap 的环境变量,包括其所有键/值对。 请注意,Resulting definition 部分显示 configmap 中键的名称,但不显示 configmap 中引用的键的实际值。 单击“**完成 **”保存更改。
    • 单击 添加 以打开“添加环境变量”页面,并创建另一个 _引用已定义私钥的单个密钥_的环境变量。 在可以引用私钥之前,它必须存在。 对于此示例,存在名为 mynewsecret 的私钥,该私钥包含以下键/值对: newsec1=mynewsecret1newsec2=mynewsecret2newsec3=mynewsecret3。 创建引用 mynewsecret 密钥的 newsec2 密钥的环境变量。 请注意,Resulting definition 部分显示私钥中所选密钥的名称,但不显示私钥中引用的密钥的实际值。 单击“**完成 **”保存更改。
  6. 单击 保存并创建 以使用新的环境变量更新应用程序。
  7. 当应用程序处于 Ready 状态时,将使用环境变量更新应用程序。
  8. 要测试应用程序,请单击 测试应用程序,然后单击“测试应用程序”窗格中的 发送请求。 要在网页中打开应用程序,请单击应用程序 URL。 通过此应用程序修订版,此应用程序输出 Hello World from Code Engine 并且输出包含在先前步骤中添加的环境变量的名称。

在工作负载中设置环境变量时,此操作将添加新的环境变量或覆盖现有环境变量。 如果您具有与先前定义的环境变量具有相同 _name_的环境变量,并指定与先前定义的环境变量不同的 ,那么更新后的环境变量将覆盖现有值。 例如,如果您具有名为 envvar1 且其值为 myenvar1 的已定义环境变量,并且您定义了另一个也名为 envvar1 的环境变量并将其值指定为 mynewenvvar1,那么在保存并部署更新的应用程序或保存更新的作业之后,正在运行的应用程序或作业将使用值为 mynewenvvar1envvar1 环境变量。

从控制台更新环境变量

  1. 要更新现有环境变量,请转至包含要更改的环境变量的应用程序,作业或函数,然后单击 环境变量 选项卡以显示环境变量表。
  2. 从环境变量表中,单击要更新的环境变量。
  3. 在“编辑环境变量”页面中,进行更新,然后单击 完成 以保存更改。 编辑环境变量时,可以更改 定义依据 值及其相应的必填字段。
  4. 单击 保存并部署 以使用更改来部署应用程序,或者单击 保存 以使用更改来运行作业。 当应用程序或作业处于 Ready 状态时,将使用环境变量更新应用程序或作业。

使用 CLI 创建和更新环境变量

使用 Code Engine CLI 创建和管理环境变量。

使用 CLI 创建或更新应用程序,作业或功能时,可以定义环境变量。

使用 CLI 创建环境变量时,可以引用 configmap 或私钥,也可以创建字面值环境变量。 这些指示信息描述如何使用 CLI 创建和更新字面值环境变量。

有关将完整私钥和 configmap 作为环境变量引用,覆盖引用以及在 CLI 中除去引用的详细方案,请参阅 引用私钥和 configmap

准备工作

为应用程序创建和更新环境变量

创建并更新应用程序的环境变量,如下所示:

  • 要为应用程序创建和设置环境变量,请将 --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 createjob updatejobrun submitjobrun resubmit 命令配合使用。 以下示例创建使用 icr.io/codeengine/codeengine 映像的 myjob 作业,并定义 envA 环境变量。

    ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine --env envA=A
    
  • 要更新现有作业的环境变量,请将 --env 选项与 job updatejobrun 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-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
    

使用环境变量更新工作负载的注意事项

更新具有引用 configmap 或 secret 的环境变量的应用程序,作业或函数时,请考虑以下信息。

  • 当您更新具有完全引用 configmap (或私钥) 的环境变量的应用程序,作业或函数以完全引用其他 configmap (或私钥) 时,完全引用将按设置顺序覆盖其他完整引用 (最后引用的集合将覆盖第一个集合)。
  • 当您更新具有环境变量的应用程序,作业或函数,该环境变量引用了一个 configmap (或私钥) 中的密钥以引用另一个 configmap (或私钥) 中的相同密钥时,将使用最后引用的密钥。
  • 更新具有完全引用 configmap (或 secret) 的环境变量的应用程序,作业或函数以添加对特定密钥的引用时,特定密钥引用将覆盖完整 configmap (或 secret) 引用。

删除环境变量

如果不再需要某个环境变量,可以将其删除。

从控制台中删除环境变量

  1. 从控制台中,转至具有要删除的环境变量的应用程序,作业或函数。 单击环境变量选项卡。
  2. 从环境变量表中,删除要从应用程序,作业或函数中除去的环境变量。
  3. 单击 保存并部署 以更新应用程序,或者单击 保存 以使用新的环境变量更新作业或功能。 当应用程序,作业或函数处于 Ready 状态时,将使用当前环境变量对其进行更新。

使用 CLI 删除环境变量

使用 CLI 处理环境变量时,可以引用现有 configmap 或私钥,也可以使用字面值环境变量。 这些指示信息描述使用 CLI 删除字面值环境变量。

有关在 CLI 中除去对完整私钥和 configmap 的引用的详细方案,请参阅 引用私钥和 configmap

删除应用程序的环境变量

要除去应用程序的环境变量,请将 --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