更新作业
您可以对已定义的作业进行更改,并从控制台或使用 CLI 运行更新后的作业。 对作业的更改可能包括更新代码容器映像,代码自变量或命令,运行时实例资源或环境变量。
每次作业运行时,引用的容器映像的最新版本都将用于作业运行,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于作业运行。
如果可能,将以并行方式运行已提交的批处理作业。 如果提交的作业的数量或大小超过配置的配额限制 (例如,最大运行实例数),那么 Code Engine 会将作业排队并延迟运行这些作业,直到足够的作业完成为止。 有关作业 (包括内存和 CPU) 的配额和限制的更多信息,请参阅 Code Engine的限制和配额。
您可以通过以下 任何 方式 更新作业 及其引用的代码,而与创建或先前更新作业的方式无关。
-
如果您具有容器映像,那么根据 Open Container Initiative(OCI)标准,您只需提供对该映像的引用,这将在创建 (或更新) 作业时指向容器注册表的位置。 您可以从 公共注册表 或 专用注册表 中的映像创建 (或更新) 作业,然后从作业运行中访问引用的映像。
如果使用
job create
命令创建了作业,并且指定了--build-source
选项以从本地或存储库源构建容器映像,并且要将作业更改为指向其他容器映像,那么必须首先从作业中除去该构建的关联。 例如,运行ibmcloud ce job update -n JOB_NAME --build-clear
。 从作业中除去构建的关联后,可以更新作业以引用其他映像。 -
如果从位于 Git 存储库中的源代码开始,那么可以选择让 Code Engine 负责从源构建映像,并使用 单个 操作创建 (或更新) 作业。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 从存储库源代码创建作业。 如果想要对映像的构建进行更多控制,那么可以选择在创建 (或更新) 作业并运行作业之前使用 Code Engine 来 构建映像。
-
如果是从本地工作站上的源代码开始,那么可以选择让 Code Engine 负责从源构建映像并使用 单个 CLI 命令创建作业。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 使用 CLI 从本地源代码创建作业。 如果想要对映像的构建进行更多控制,那么可以选择在创建 (或更新) 作业并运行作业之前使用 Code Engine 来 构建映像。
例如,您可以选择让 Code Engine 在为作业开发源时处理本地源的构建。 然后,在映像成熟后,可以更新作业以引用所需的特定映像。 您可以根据需要重复此过程。
运行更新后的作业时,引用的容器映像的最新版本将用于作业运行,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于作业运行。
从控制台更新作业
当作业处于就绪状态时,您可以更新该作业。 让我们更新先前创建的 myjob
作业,以将容器映像从 icr.io/codeengine/firstjob
更改为 icr.io/codeengine/testjob
,然后更新环境变量。 向此 icr.io/codeengine/testjob
样本作业发送请求时,该作业将读取环境变量 TARGET
并打印
"Hello ${TARGET}!"
。 如果该环境变量为空,则返回 ""Hello World!"
。 有关用于此示例的代码的更多信息,请参阅 testjob
。
-
导航至您的工作页面。
- 从 Code Engine "项目" 页面中,单击项目的名称。 单击 作业 以处理作业和作业运行。
- 从“作业”页面,单击 作业 选项卡,然后单击要更新的作业的名称。
-
从 配置 选项卡中,更新作业的图像引用。 提供映像的名称或配置映像。 将映像的名称从
icr.io/codeengine/firstjob
更新为icr.io/codeengine/testjob
。 单击部署。 -
单击 提交作业。
-
在“提交作业”窗格中,接受所有缺省值,然后再次单击 提交作业 以运行作业。
-
通过 从控制台查看此作业的作业日志,该作业的输出为
Hello World!
。 -
要再次更新作业并添加环境变量,请浏览至作业页面。
-
单击 环境变量 以打开选项卡,然后单击 添加环境变量。 添加名称为
TARGET
且值为Sunshine
的字面值环境变量。icr.io/codeengine/testjob
输出消息Hello <value_of_TARGET>!>
。 -
单击完成。
-
单击 保存 以保存对作业的更新。
-
单击 提交作业 以提交更新后的作业。
-
在“提交作业”窗格中,此时间将 CPU 值更改为指定内存的其中一个有效 CPU 选项。 请注意,必须使用 有效内存和 CPU 组合。 再次单击 提交作业 以运行此作业。 系统将在“作业详细信息”页面上显示作业的状态。 请注意作业详细信息的
Configuration
部分中更新的 CPU 值。 -
通过 从控制台查看此作业的作业日志,更新后的作业的输出为
Hello Sunshine!
。
使用 CLI 更新作业
通过 CLI,您可以更新现有作业配置或在新作业运行上指定更改。
使用 CLI 更新作业配置
您可以使用 ibmcloud ce job update
命令更新现有作业配置。
-
使用
job update
命令更新myjob
作业以引用其他映像。ibmcloud ce job update --name myjob --image icr.io/codeengine/testjob
运行
ibmcloud ce job get -n myjob
命令以显示已更新作业的详细信息。示例输出
Name: myjob ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-06-04T11:56:22-04:00 Last Job Run: Name: myjob-jobrun-abcde Age: 32d Created: 2021-08-06T13:50:02-04:00 Image: icr.io/codeengine/testjob Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 [...]
-
运行
ibmcloud ce jobrun submit
命令以运行引用此已更新作业配置的作业。 对于jobrun submit
命令,请使用--job
选项来引用已定义的作业配置。 虽然如果指定了--job
选项,那么不需要--name
选项,但以下示例命令指定--name
选项以提供此作业运行的名称。ibmcloud ce jobrun submit --name myjobrun1 --job myjob
-
运行
ibmcloud ce jobrun get -n myjobrun1
以查看此作业运行的详细信息。 请注意,引用的映像是icr.io/codeengine/testjob
,它基于更新的作业配置。示例输出
Getting jobrun 'myjobrun1'... Getting instances of jobrun 'myjobrun1'... Getting events of jobrun 'myjobrun1'... [...] Name: myjobrun1 ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-06-15T11:56:22-04:00 Job Ref: myjob Image: icr.io/codeengine/testjob Resource Allocation: CPU: 1 Ephemeral Storage: 4G Memory: 4G Runtime: Mode: task Array Indices: 0 Array Size: 1 JOP_ARRAY_SIZE Value: 1 Max Execution Time: 7200 Retry Limit: 3 Status: Completed: 11s Instance Statuses: Succeeded: 1 Conditions: Type Status Last Probe Last Transition Pending True 15s 15s Running True 11s 11s Complete True 11s 11s Events: Type Reason Age Source Messages Normal Updated 16s (x3 over 20s) batch-job-controller Updated JobRun "myjobrun1" Normal Completed 16s batch-job-controller JobRun completed successfully Instances: Name Running Status Restarts Age myjobrun1-0-0 0/1 Succeeded 0 20s
使用 CLI 更新作业运行
您可以使用 ibmcloud ce jobrun resubmit
命令指定作业运行的更改。 jobrun submit
命令重新提交引用先前作业运行的作业运行。
-
使用
jobrun resubmit
命令重新提交myjobrun1
作业运行,并将数组下标从0
更改为1-4
。 虽然jobrun resubmit
命令不需要--name
选项,但以下示例命令指定--name
选项以提供此作业运行的名称。ibmcloud ce jobrun resubmit -jobrun myjobrun1 --array-indices "1-4" --name myjobrunresubmit
-
运行
ibmcloud ce jobrun get -n myjobrunresubmit
命令以显示更新后的作业运行的详细信息。 请注意,将为此作业运行更新数组下标的值。示例输出
Getting jobrun 'myjobrunresubmit'... Getting instances of jobrun 'myjobrunresubmit'... Getting events of jobrun 'myjobrunresubmit'... [...] Name: myjobrunresubmit2 ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-06-04T11:56:22-04:00 Job Ref: myjob Image: icr.io/codeengine/testjob Resource Allocation: CPU: 1 Ephemeral Storage: 4G Memory: 4G Runtime: Mode: task Array Indices: 1-4 Array Size: 4 JOP_ARRAY_SIZE Value: 4 Max Execution Time: 7200 Retry Limit: 3 Status: Completed: 34s Instance Statuses: Succeeded: 4 Conditions: Type Status Last Probe Last Transition Pending True 38s 38s Running True 36s 36s Complete True 34s 34s Events: Type Reason Age Source Messages Normal Updated 36s (x7 over 40s) batch-job-controller Updated JobRun "myjobrunresubmit" Normal Completed 36s batch-job-controller JobRun completed successfully Instances: Name Running Status Restarts Age myjobrunresubmit-1-0 0/1 Succeeded 0 40s myjobrunresubmit-2-0 0/1 Succeeded 0 40s myjobrunresubmit-3-0 0/1 Succeeded 0 40s myjobrunresubmit-4-0 0/1 Succeeded 0 40s
无法从控制台查看通过 CLI 提交 (或重新提交) 但未引用已定义作业配置的作业运行。