使用环境变量

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

创建和更新环境变量

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

您可以将环境变量定义为字面值,也可以引用现有的秘密或配置映射。Code Engine 使用环境变量使 秘密配置映射 能够被作业、应用程序或函数使用。

从控制台创建环境变量

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

在控制台创建或更新应用程序、作业或函数时,可以定义环境变量。

准备工作

  • 您必须 创建项目,且 项目必须处于 active 状态。
  • 确定是要创建一个字面意义上的环境变量,还是要创建一个引用现有秘密或 configmap 的环境变量。 如果希望环境变量完全引用现有的密钥或配置映射,或引用现有密钥或配置映射中的单个密钥,则密钥或配置映射必须存在。 请参阅“创建机密”或“创建配置图”,在继续操作前定义您的机密或配置图。
  1. 要在添加环境变量页面上打开定义环境变量的对话框,请完成以下选项之一。

    • 如果要 创建 应用程序,请在创建应用程序页面展开环境变量(可选) 部分。 您可以在创建的应用程序中添加一个或多个环境变量。 单击“添加”打开“添加环境变量”页面。
    • 如果要 创建 任务,请从创建任务页面展开环境变量(可选) 部分。 单击“添加”打开“添加环境变量”页面。
    • 如果要 创建函数,请在创建函数页面展开环境变量(可选) 部分。 单击“添加”打开“添加环境变量”页面。
    • 如果要更新现有工作负载以添加环境变量,请转到现有应用程序、作业或函数。 从“配置”选项卡,单击“环境变量”。 对于应用程序、工作和功能,单击添加环境变量打开添加环境变量页面。
  2. 在添加环境变量页面,用以下方法之一创建环境变量、

    • 要创建_字面_环境变量,请选择 Literal value,指定字面环境变量的名称,并提供一个值。 注意 Resulting definition 部分显示了环境变量的名称及其值。
    • 要创建一个_完全引用配置映射的_环境变量,请选择 Reference full configmap,然后选择现有的配置映射。 在这种情况下,所选配置图的所有键都会作为环境变量的一部分被引用。 请注意,Resulting definition 部分显示的是配置表中的键的名称,但不显示配置表中引用的键的实际值。
    • 要创建一个_引用已定义配置映射中单个键的_环境变量,请选择 Reference key in configmap,选择所需的现有配置映射,然后选择要引用作为环境变量一部分的键。 选择要引用的配置映射表中的单个键后,请注意 Resulting definition 部分会显示配置映射表中选定键的名称,但不会显示配置映射表中引用的键的实际值。
    • 要创建一个_完全引用秘密的_环境变量,请选择 Reference full secret,然后选择现有秘密。 在这种情况下,所选机密的所有密钥都会作为环境变量的一部分被引用。 请注意,Resulting definition 部分会显示密文中的密钥名称,但不会显示密文中引用的密钥的实际值。
    • 要创建一个环境变量来_引用已定义秘密中的单个密钥_,请选择 Reference key in secret,选择要引用的现有秘密,然后选择要引用作为环境变量一部分的密钥。 选择密文中要引用的单个密钥后,注意 Resulting definition 部分会显示密文中选定密钥的名称,但不会显示密文中引用的密钥的实际值。

    在控制台中,每个环境变量只能引用一个已定义配置映射或秘密的单独密钥。 如果需要引用不止一个配置映射或秘密的密钥,请重复上述步骤,定义另一个引用不同密钥的环境变量。

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

  4. 使用定义的环境变量完成应用程序、任务或功能的创建或更新。

    • 如果要创建工作负载,单击“**创建 **”后,应用程序、作业或功能将与环境变量一起部署。
    • 如果要更新现有应用程序、作业或函数以添加环境变量,请单击“保存并部署”更新应用程序,或单击“**保存 **”使用新环境变量更新作业或函数。
  5. 当应用程序、作业或函数处于 Ready 状态时,它就会根据环境变量进行更新。

下表介绍了有关环境变量的信息。

环境变量表
标题 描述
Name 环境变量的名称。
Defined by 指定环境变量的类型是否为 literal,或者环境变量是否为完全引用的配置表或密钥,或者是否引用了密钥或配置表中的特定密钥。
Value or reference 显示字面值、完全引用的配置表或密文,或配置表或密文的引用密钥。

例如,让我们创建一个应用程序并为其设置环境变量。

  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_ 的环境变量。 在引用配置映射之前,它必须存在。 在本例中,存在一个名为 mycolorconfigmap 的配置映射,其中包含以下键值对:key1=blue, key2=green,和 key3=yellow。 创建一个环境变量,完全引用 mycolorconfigmap configmap,包括其所有键值对。 请注意,Resulting definition 部分显示的是配置表中的键名,但不显示配置表中引用的键的实际值。 单击“**完成 **”保存更改。
    • 单击“添加”打开“添加环境变量”页面,并创建另一个环境变量,用于_引用已定义密钥的单个密钥_。 在引用秘密之前,它必须存在。 在本例中,存在一个名称为 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. 在“编辑环境变量”页面进行更新,然后单击“完成”保存更改。 编辑环境变量时,可以更改“由定义”值及其相应的必填字段。
  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
    

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

在更新具有引用配置映射或机密的环境变量的应用程序、作业或函数时,请考虑以下信息。

当您更新具有完全引用配置映射(或密文)的环境变量的应用程序、作业或函数,使其完全引用不同的配置映射(或密文)时,完全引用会按照设置顺序覆盖其他完全引用(最后引用的集合覆盖最先设置的集合)。

如果某个应用程序、作业或函数的环境变量引用了某个配置映射(或密文)中的密钥,而更新后又引用了另一个配置映射(或密文)中的相同密钥,则会使用最后引用的密钥。

在更新应用程序、作业或函数时,如果该应用程序、作业或函数的环境变量完全引用配置映射(或密文),以添加对特定密钥的引用,则特定密钥引用会覆盖完整的配置映射(或密文)引用。

删除环境变量

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

从控制台删除环境变量

  1. 从控制台转到具有要删除的环境变量的应用程序、任务或函数。 单击环境变量选项卡。
  2. 从环境变量表中,删除要从应用程序、任务或功能中移除的环境变量。
  3. 单击“保存并部署”更新应用程序,或单击“**保存 **”使用新环境变量更新作业或功能。 当应用程序、作业或函数处于 Ready 状态时,它将根据当前环境变量进行更新。

使用 CLI 删除环境变量

使用 CLI 处理环境变量时,可以引用现有的配置映射或秘密,也可以处理字面意义上的环境变量。 这些说明介绍了如何使用 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