使用环境变量
了解如何在 Code Engine中使用环境变量 (env variables
)。 您可以将环境变量设置为可供应用程序,作业或函数使用的键/值对。
创建和更新环境变量
使用 Code Engine创建和管理环境变量。
您可以将环境变量定义为字面值,也可以引用现有私钥或 configmap。Code Engine 使用环境变量使作业,应用程序或函数能够使用 私钥 或 configmaps。
从控制台创建环境变量
使用 Code Engine 控制台创建和更新环境变量。
您可以在控制台中创建或更新应用程序,作业或功能时定义环境变量。
准备工作
- 您必须 创建项目,并且 项目 必须处于
active
状态。 - 确定是要创建字面值环境变量,还是要创建引用现有私钥或 configmap 的环境变量。 如果您希望环境变量完全引用现有私钥或 configmap,或者引用现有私钥或 configmap 中的各个密钥,那么该私钥或 configmap 必须存在。 请参阅 创建私钥 或 创建 configmap 以定义私钥或 configmap,然后再继续操作。
-
要打开对话框以在“添加环境变量”页面上定义环境变量,请完成下列其中一个选项。
-
从“添加环境变量”页面中,通过下列其中一种方式创建环境变量:
- 要创建 文字 环境变量,请选择
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 的多个密钥,请重复这些步骤以定义另一个引用另一个密钥的环境变量。
- 要创建 文字 环境变量,请选择
-
单击“**完成 **”保存更改。 此操作会将环境变量添加到 环境变量 选项卡上的表中。 要继续添加环境变量,请单击 添加。
-
使用定义的环境变量完成应用程序,作业或函数的创建或更新。
- 如果要创建工作负载,那么单击 创建时,将使用环境变量来部署应用程序,作业或函数。
- 如果要更新现有应用程序,作业或函数以添加环境变量,请单击 保存并部署 以更新应用程序,或者单击 保存 以使用新的环境变量更新作业或函数。
-
当应用程序,作业或功能处于
Ready
状态时,将使用环境变量对其进行更新。
下表描述了有关环境变量的信息。
标题 | 描述 |
---|---|
Name |
环境变量的名称。 |
Defined by |
指定环境变量是 literal 类型,还是环境变量是完全引用的 configmap 或 secret,或者是否引用私钥或 configmap 的特定密钥。 |
Value or reference |
显示字面值,完全引用的 configmap 或 secret,或者 configmap 或 secret 的引用键。 |
例如,让我们创建应用程序并为该应用程序设置环境变量。
- 名为
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_的环境变量。 在可以引用 configmap 之前,它必须存在。 对于此示例,存在名为
mycolorconfigmap
的 configmap,它包含以下键/值对:key1=blue
,key2=green
和key3=yellow
。 创建完全引用mycolorconfigmap
configmap 的环境变量,包括其所有键/值对。 请注意,Resulting definition
部分显示 configmap 中键的名称,但不显示 configmap 中引用的键的实际值。 单击“**完成 **”保存更改。 - 单击 添加 以打开“添加环境变量”页面,并创建另一个 _引用已定义私钥的单个密钥_的环境变量。 在可以引用私钥之前,它必须存在。 对于此示例,存在名为
mynewsecret
的私钥,该私钥包含以下键/值对:newsec1=mynewsecret1
,newsec2=mynewsecret2
和newsec3=mynewsecret3
。 创建引用mynewsecret
密钥的newsec2
密钥的环境变量。 请注意,Resulting definition
部分显示私钥中所选密钥的名称,但不显示私钥中引用的密钥的实际值。 单击“**完成 **”保存更改。
- 单击 添加 以打开“添加环境变量”页面并创建 文字 环境变量。 例如,创建名为
- 单击 保存并创建 以使用新的环境变量更新应用程序。
- 当应用程序处于
Ready
状态时,将使用环境变量更新应用程序。 - 要测试应用程序,请单击 测试应用程序,然后单击“测试应用程序”窗格中的 发送请求。 要在网页中打开应用程序,请单击应用程序 URL。 通过此应用程序修订版,此应用程序输出
Hello World from Code Engine
并且输出包含在先前步骤中添加的环境变量的名称。
在工作负载中设置环境变量时,此操作将添加新的环境变量或覆盖现有环境变量。 如果您具有与先前定义的环境变量具有相同 _name_的环境变量,并指定与先前定义的环境变量不同的 值,那么更新后的环境变量将覆盖现有值。 例如,如果您具有名为 envvar1
且其值为 myenvar1
的已定义环境变量,并且您定义了另一个也名为 envvar1
的环境变量并将其值指定为 mynewenvvar1
,那么在保存并部署更新的应用程序或保存更新的作业之后,正在运行的应用程序或作业将使用值为
mynewenvvar1
的 envvar1
环境变量。
从控制台更新环境变量
- 要更新现有环境变量,请转至包含要更改的环境变量的应用程序,作业或函数,然后单击 环境变量 选项卡以显示环境变量表。
- 从环境变量表中,单击要更新的环境变量。
- 在“编辑环境变量”页面中,进行更新,然后单击 完成 以保存更改。 编辑环境变量时,可以更改 定义依据 值及其相应的必填字段。
- 单击 保存并部署 以使用更改来部署应用程序,或者单击 保存 以使用更改来运行作业。 当应用程序或作业处于
Ready
状态时,将使用环境变量更新应用程序或作业。
使用 CLI 创建和更新环境变量
使用 Code Engine CLI 创建和管理环境变量。
使用 CLI 创建或更新应用程序,作业或功能时,可以定义环境变量。
使用 CLI 创建环境变量时,可以引用 configmap 或私钥,也可以创建字面值环境变量。 这些指示信息描述如何使用 CLI 创建和更新字面值环境变量。
有关将完整私钥和 configmap 作为环境变量引用,覆盖引用以及在 CLI 中除去引用的详细方案,请参阅 引用私钥和 configmap。
准备工作
- 设置 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-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) 引用。
删除环境变量
如果不再需要某个环境变量,可以将其删除。
从控制台中删除环境变量
- 从控制台中,转至具有要删除的环境变量的应用程序,作业或函数。 单击环境变量选项卡。
- 从环境变量表中,删除要从应用程序,作业或函数中除去的环境变量。
- 单击 保存并部署 以更新应用程序,或者单击 保存 以使用新的环境变量更新作业或功能。 当应用程序,作业或函数处于
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 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