使用环境变量
了解如何在 Code Engine 中使用环境变量 (env variables)。 您可以将环境变量设置为键值对,供应用程序、作业或函数使用。
创建和更新环境变量
使用 Code Engine 创建和管理环境变量。
您可以将环境变量定义为字面值,也可以引用现有的秘密或配置映射。Code Engine 使用环境变量使 秘密 或 配置映射 能够被作业、应用程序或函数使用。
从控制台创建环境变量
使用 Code Engine 控制台创建和更新环境变量。
在控制台创建或更新应用程序、作业或函数时,可以定义环境变量。
准备工作
- 您必须 创建项目,且 项目必须处于
active状态。 - 确定是要创建一个字面意义上的环境变量,还是要创建一个引用现有秘密或 configmap 的环境变量。 如果希望环境变量完全引用现有的密钥或配置映射,或引用现有密钥或配置映射中的单个密钥,则密钥或配置映射必须存在。 请参阅“创建机密”或“创建配置图”,在继续操作前定义您的机密或配置图。
-
要在添加环境变量页面上打开定义环境变量的对话框,请完成以下选项之一。
-
在添加环境变量页面,用以下方法之一创建环境变量、
- 要创建_字面_环境变量,请选择
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部分会显示密文中选定密钥的名称,但不会显示密文中引用的密钥的实际值。
在控制台中,每个环境变量只能引用一个已定义配置映射或秘密的单独密钥。 如果需要引用不止一个配置映射或秘密的密钥,请重复上述步骤,定义另一个引用不同密钥的环境变量。
- 要创建_字面_环境变量,请选择
-
单击“完成 ”保存更改。 此操作会将环境变量添加到环境变量选项卡的表格中。 要继续添加环境变量,请单击“添加”。
-
使用定义的环境变量完成应用程序、任务或功能的创建或更新。
- 如果要创建工作负载,单击“**创建 **”后,应用程序、作业或功能将与环境变量一起部署。
- 如果要更新现有应用程序、作业或函数以添加环境变量,请单击“保存并部署”更新应用程序,或单击“**保存 **”使用新环境变量更新作业或函数。
-
当应用程序、作业或函数处于
Ready状态时,它就会根据环境变量进行更新。
下表介绍了有关环境变量的信息。
| 标题 | 描述 |
|---|---|
Name |
环境变量的名称。 |
Defined by |
指定环境变量的类型是否为 literal,或者环境变量是否为完全引用的配置表或密钥,或者是否引用了密钥或配置表中的特定密钥。 |
Value or reference |
显示字面值、完全引用的配置表或密文,或配置表或密文的引用密钥。 |
例如,让我们创建一个应用程序并为其设置环境变量。
- 创建应用程序 名为
myapp,它使用icr.io/codeengine/codeengine图像。 这个hello-world应用程序包含TARGET环境变量,该程序会打印Hello ${TARGET} from Code Engine并打印环境变量列表。 如果TARGET环境变量为空,则返回Hello World from Code Engine。 - 进入控制台中的此应用程序。
- 当应用程序处于
Ready状态时,您就可以测试应用程序了。 单击测试应用程序,然后单击测试应用程序窗格中的发送请求。 要在网页中打开应用程序,请单击应用程序 URL。myapp应用程序会返回Hello World from Code Engine响应,并打印出该程序中包含的环境变量。 - 单击环境变量选项卡。
- 创建以下环境变量
- 单击“添加”打开“添加环境变量”页面,创建一个_字面_环境变量。 例如,创建一个字面环境变量,名称为
literalenvvar,值为This is my literal。 单击“**完成 **”保存更改。 - 单击“添加”打开“添加环境变量”页面,并创建一个_完全引用 configmap_ 的环境变量。 在引用配置映射之前,它必须存在。 在本例中,存在一个名为
mycolorconfigmap的配置映射,其中包含以下键值对:key1=blue,key2=green,和key3=yellow。 创建一个环境变量,完全引用mycolorconfigmapconfigmap,包括其所有键值对。 请注意,Resulting definition部分显示的是配置表中的键名,但不显示配置表中引用的键的实际值。 单击“**完成 **”保存更改。 - 单击“添加”打开“添加环境变量”页面,并创建另一个环境变量,用于_引用已定义密钥的单个密钥_。 在引用秘密之前,它必须存在。 在本例中,存在一个名称为
mynewsecret的秘密,其中包含以下键值对:newsec1=mynewsecret1,newsec2=mynewsecret2,和newsec3=mynewsecret3。 创建一个环境变量,引用mynewsecretsecret 的newsec2密钥。 注意Resulting definition部分会显示密文中选定密钥的名称,但不会显示密文中引用的密钥的实际值。 单击“**完成 **”保存更改。
- 单击“添加”打开“添加环境变量”页面,创建一个_字面_环境变量。 例如,创建一个字面环境变量,名称为
- 单击“保存并创建”, 用新的环境变量更新应用程序。
- 当应用处于
Ready状态时,应用会根据环境变量进行更新。 - 要测试应用程序,请单击“测试应用程序”,然后单击“测试应用程序”窗格中的“发送请求”。 要在网页中打开应用程序,请单击应用程序 URL。 修订后,该程序将输出
Hello World from Code Engine,输出内容包括前几步中添加的环境变量名称。
在工作负载中设置环境变量时,该操作会添加新的环境变量或覆盖现有的环境变量。 如果您有一个_同名_的环境变量,但指定的_值_与之前定义的环境变量不同,则更新后的环境变量会覆盖现有值。 例如,如果您定义了一个名为 envvar1 的环境变量,其值为 myenvar1,而您又定义了另一个名为 envvar1 的环境变量,并指定其值为 mynewenvvar1,那么在您保存并部署更新的应用程序或保存更新的作业后,正在运行的应用程序或作业会使用
envvar1 环境变量,其值为 mynewenvvar1。
从控制台更新环境变量
- 要更新现有的环境变量,请转到包含要更改的环境变量的应用程序、作业或函数,然后单击“环境变量”选项卡以显示环境变量表。
- 从环境变量表中,单击要更新的环境变量。
- 在“编辑环境变量”页面进行更新,然后单击“完成”保存更改。 编辑环境变量时,可以更改“由定义”值及其相应的必填字段。
- 单击“保存并部署”以根据更改部署应用程序,或单击“**保存 **”以根据更改运行作业。 当应用程序或任务处于
Ready状态时,应用程序或任务会根据环境变量进行更新。
使用 CLI 创建和更新环境变量
使用 Code Engine CLI 创建和管理环境变量。
使用 CLI 创建或更新应用程序、任务或函数时,可以定义环境变量。
使用 CLI 创建环境变量时,可以引用 configmaps 或 secrets,也可以创建一个字面意义上的环境变量。 这些说明介绍了如何使用 CLI 创建和更新字面环境变量。
有关在 CLI 中以环境变量引用完整秘密和配置映射、覆盖引用和删除引用的详细方案,请参阅 引用秘密和配置 映射。
准备工作
- 设置 Code Engine CLI 环境。
- 创建项目并开展工作。
为应用程序创建和更新环境变量
为应用程序创建和更新环境变量,如下所示、
-
要为应用程序创建和设置环境变量,可使用
--env选项和app create或app update命令使用 选项。 下面的示例创建了使用icr.io/codeengine/codeengine映像的myapp应用程序,并定义了envA和envB环境变量。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 submit或jobrun 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 submit或jobrun 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 create或function 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
使用环境变量更新工作负载的注意事项
在更新具有引用配置映射或机密的环境变量的应用程序、作业或函数时,请考虑以下信息。
当您更新具有完全引用配置映射(或密文)的环境变量的应用程序、作业或函数,使其完全引用不同的配置映射(或密文)时,完全引用会按照设置顺序覆盖其他完全引用(最后引用的集合覆盖最先设置的集合)。
如果某个应用程序、作业或函数的环境变量引用了某个配置映射(或密文)中的密钥,而更新后又引用了另一个配置映射(或密文)中的相同密钥,则会使用最后引用的密钥。
在更新应用程序、作业或函数时,如果该应用程序、作业或函数的环境变量完全引用配置映射(或密文),以添加对特定密钥的引用,则特定密钥引用会覆盖完整的配置映射(或密文)引用。
删除环境变量
如果不再需要某个环境变量,可以将其删除。
从控制台删除环境变量
- 从控制台转到具有要删除的环境变量的应用程序、任务或函数。 单击环境变量选项卡。
- 从环境变量表中,删除要从应用程序、任务或功能中移除的环境变量。
- 单击“保存并部署”更新应用程序,或单击“**保存 **”使用新环境变量更新作业或功能。 当应用程序、作业或函数处于
Ready状态时,它将根据当前环境变量进行更新。
使用 CLI 删除环境变量
使用 CLI 处理环境变量时,可以引用现有的配置映射或秘密,也可以处理字面意义上的环境变量。 这些说明介绍了如何使用 CLI 删除字面环境变量。
有关在 CLI 中移除对完整秘密和配置映射的引用的详细方案,请参阅 引用秘密和配置映射。
删除应用程序的环境变量
要移除应用程序的环境变量,请使用 --env-rm 选项和 app update 命令中使用该选项。 下面的示例更新了 myapp 应用程序,删除了 envA 环境变量。
ibmcloud ce application update --name myapp --env-rm envA
删除工作环境变量
要删除作业的环境变量,请使用 --env-rm 选项和 job update 或 jobrun 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