IBM Cloud Docs
运行作业

运行作业

创建作业后,可以根据作业的定义来运行该作业,也可以使用覆盖属性来运行该作业。 从控制台或使用 CLI 运行作业。

每次作业运行时,引用的容器映像的最新版本都将用于作业运行,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于作业运行。

如果可能,将以并行方式运行已提交的批处理作业。 如果提交作业的数量或大小超过了配置的配额限制(如运行实例的最大数量),Code Engine 就会排队等候作业,并延迟运行作业,直到有足够的作业完成为止。 有关批处理作业的更多信息,请参阅 批处理作业工作量。 有关内存和 CPU 等作业配额和限制的更多信息,请参阅 Code Engine 的限制和配额

订阅创建的工作运行将在十分钟后自动删除。 有关预订的更多信息,请参阅 预订入门

一周后,自动删除已完成的工作。

从控制台运行作业

创建作业时,可以立即运行该作业。 但是,您可以随时提交和重新提交作业。 您还可以提交或重新提交先前创建的作业。

  1. 打开 Code Engine 控制台。
  2. 从导航菜单中选择项目。 选择项目作为当前上下文。
  3. 从“概述”页面中,从“摘要”部分中选择“作业”或从导航菜单中选择“作业”。
  4. 单击 作业 选项卡,然后单击要运行的作业的名称。
  5. 单击 提交作业 以打开“提交作业”对话框。 复审并 (可选) 更改缺省配置值,例如实例,CPU,内存,作业重试次数和作业超时。 有关这些选项的更多信息,请参阅 用于创建和运行作业的选项
  6. 单击 提交作业 以运行作业。 系统会在作业详细信息页面上显示作业实例的状态。
  7. 如果您的作业出现任何运行失败的情况,请排除故障,然后点击 “重新运行失败的索引”,为失败的索引再次运行作业。 在“提交工作”面板中,查看并选择更改配置值。 Array索引部分会自动列出运行失败的作业实例的索引。 复审并 (可选) 更改配置值后,单击 提交作业 以运行作业。

如需排除常见作业运行索引错误,请参阅 了解作业运行索引失败的原因

您也可以重新运行现有的作业。 要再次运行特定作业运行,请单击 作业运行 选项卡,然后单击要使用的作业运行的名称。 单击 重新运行 以再次运行此作业。

您可以在添加日志记录功能之后查看作业日志。 有关更多信息,请参阅查看日志

每当作业运行时,都会自动将 JOB_INDEX 环境变量注入到作业的每个实例中。 有关 Code Engine设置的环境变量的更多信息,请参阅 我看到未创建的 configmap。 我可以删除它们吗?

使用 CLI 运行作业

准备工作

要使用 CLI 运行作业,请使用 jobrun submit 命令。 有关选项的完整列表,请参阅 ibmcloud ce jobrun submit 命令。

通过 CLI,您可以 根据作业配置运行作业,也可以 在不首先创建作业配置的情况下运行作业

根据作业配置使用 CLI 运行作业

通过创建作业配置,您可以更轻松地多次运行作业。

例如,以下 jobrun submit 命令创建五个新实例以运行在定义的 myjob 作业配置中指定的容器映像。 要引用定义的作业配置,请使用 --job 选项。 虽然如果指定了 --job 选项,那么不需要 --name 选项,但以下示例命令指定 --name 选项以提供此作业运行的名称。 对于作业,cpu 的缺省值为 1,而 memory 的缺省值为 4G。 将对每个实例应用资源限制和请求,因此每个实例都将获取 4 G 内存和 1 vCPU。 此作业分配 5 \ * 4 G = 20 G 内存和 5 \ * 1 vCPU = 5 vCPUs。

ibmcloud ce jobrun submit --name testjobrun --job myjob --array-indices "1 - 5"

下表概述了此示例中与 jobrun submit 命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅 ibmcloud ce jobrun submit 命令。

命令选项
选项 描述
--name 此作业运行的名称。 如果未指定 --job 值,那么需要 --name--image 值。 使用在项目中唯一的名称。
-该名称必须以小写字母数字字符开头和结尾。
-该名称必须不超过 53 个字符,并且可以包含字母,数字,句点 (.) 和连字符 (-)。
--job 这是要运行的作业的名称。 如果未指定 --name--image 值,那么此值是必需的。
--array-indices 指定用于运行作业的实例索引。 指定用连字符 (-) 或逗号 (,) 分隔的索引列表或范围;例如,1,3,6,91-5,7-8,10。 最大值是 999999。 此值是可选的。 默认值为 0

每当作业运行时,都会自动将 JOB_INDEX 环境变量注入到作业的每个实例中。 有关 Code Engine设置的环境变量的更多信息,请参阅 我看到未创建的 configmap。 我可以删除它们吗?

使用 CLI 运行作业而不首先创建作业配置

通过 CLI,您可以在不首先创建作业配置的情况下提交作业运行。 您可以在 jobrun submitjobrun resubmit 命令上指定与 job create 命令相同的配置选项。

例如,以下 ibmcloud ce jobrun submit 命令提交作业运行以通过使用 myregistry 访问信息来引用 us.icr.io/mynamespace/myhello_bld 映像。 由于此作业运行未引用定义的作业配置,因此必须为 --nameimage 选项指定值。 使用 --name 来指定此作业运行的名称,并使用 --image 来提供用于此作业运行的映像的名称。 --array-indices 选项创建五个新实例以运行容器映像。 对于作业运行,cpu 的缺省值为 1memory 的缺省值为 4G。 将对每个实例应用资源限制和请求,因此每个实例都将获取 4 G 内存和 1 vCPU。 此作业运行将分配 5 \ * 4 G = 20 G 内存和 5 \ * 1 vCPU = 5 vCPUs。

ibmcloud ce jobrun submit --name myhellojob-jobruna --image us.icr.io/mynamespace/myhello_bld --registry-secret myregistry   --array-indices "1 - 5"

运行 jobrun get -n myhellojob-jobruna 命令以检查作业运行状态。

示例输出

[...]

Name:          myhellojob-jobruna
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


Image:                us.icr.io/mynamespace/myhello_bld
Resource Allocation:
    CPU:                1
    Ephemeral Storage:  400M
    Memory:             4G
Registry Secrets:
    myregistry

Runtime:
    Mode:                  task
    Array Indices:         1 - 5
    Array Size:            5
    JOP_ARRAY_SIZE Value:  5
    Max Execution Time:    7200
    Retry Limit:           3

Status:
    Completed:          9s
    Instance Statuses:
        Succeeded:  5
    Conditions:
        Type      Status  Last Probe  Last Transition
    Pending   True    16s         16s
    Running   True    13s         13s
    Complete  True    9s          9s

Events:
    Type    Reason     Age                Source                Messages
    Normal  Updated    11s (x8 over 18s)  batch-job-controller  Updated JobRun "myhellojob-jobruna"
    Normal  Completed  11s                batch-job-controller  JobRun completed successfully

Instances:
    Name                    Running  Status     Restarts  Age
    myhellojob-jobruna-1-0  0/1      Succeeded  0         18s
    myhellojob-jobruna-2-0  0/1      Succeeded  0         18s
    myhellojob-jobruna-3-0  0/1      Succeeded  0         18s
    myhellojob-jobruna-4-0  0/1      Succeeded  0         18s
    myhellojob-jobruna-5-0  0/1      Succeeded  0         18s

无法从控制台查看通过 CLI 提交 (或重新提交) 但未引用已定义作业配置的作业运行。

使用 CLI 重新提交作业

如果要根据先前作业运行的配置重新提交作业运行,请使用 jobrun resubmit 命令。 此命令需要先前作业运行的名称,并且还允许其他可选参数。 有关选项的完整列表,请参阅 ibmcloud ce jobrun resubmit 命令。

例如,以下 jobrun resubmit 命令重新提交 testjobrun 作业运行。

ibmcloud ce jobrun resubmit --jobrun testjobrun

示例输出

Getting job run 'testjobrun'...
Getting job 'myjob'...
Rerunning job run 'myjob-jobrun-fji48'...
Run 'ibmcloud ce jobrun get -n myjob-jobrun-fji48' to check the job run status.

例如,以下 jobrun resubmit 命令重新提交 myhellojob-jobruna 作业运行,该作业运行是在未首先创建作业配置的情况下运行的。 由于引用的作业运行没有相关作业配置,因此必须指定 --name 选项以指定此作业运行的名称。

ibmcloud ce jobrun resubmit --jobrun myhellojob-jobruna --name myhellojob-jobrunb

运行 jobrun get -n myhellojob-jobrunb 命令以检查作业运行状态。

示例输出

Getting jobrun 'myhellojob-jobrunb'...
[...]

Name:          myhellojob-jobrunb
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

Image:                us.icr.io/mynamespace/myhello_bld
Resource Allocation:
    CPU:                1
Ephemeral Storage:  400M
Memory:             4G
Registry Secrets:
    myregistry

Runtime:
    Mode:                  task
    Array Indices:         1 - 5
    Array Size:            5
    JOP_ARRAY_SIZE Value:  5
    Max Execution Time:    7200
    Retry Limit:           3

Status:
    Completed:          91s
Instance Statuses:
    Succeeded:  5
Conditions:
    Type      Status  Last Probe  Last Transition
    Pending   True    96s         96s
    Running   True    92s         92s
    Complete  True    91s         91s

Events:
    Type    Reason     Age                Source                Messages
Normal  Updated    93s (x7 over 97s)  batch-job-controller  Updated JobRun "myhellojob-jobrunb"
Normal  Completed  93s                batch-job-controller  JobRun completed successfully

Instances:
    Name                    Running  Status     Restarts  Age
myhellojob-jobrunb-1-0  0/1      Succeeded  0         97s
myhellojob-jobrunb-2-0  0/1      Succeeded  0         97s
myhellojob-jobrunb-3-0  0/1      Succeeded  0         97s
myhellojob-jobrunb-4-0  0/1      Succeeded  0         97s
myhellojob-jobrunb-5-0  0/1      Succeeded  0         97s

无法从控制台查看通过 CLI 提交 (或重新提交) 但未引用已定义作业配置的作业运行。

后续步骤

  • 运行作业 后,要查看作业和作业运行的详细信息,请参阅 访问作业详细信息

  • 既然您的作业已创建,请考虑使您的作业由事件驱动。 通过使用事件预订,您可以通过 定期调度 来触发作业,或者将作业设置为对诸如 文件上载 之类的事件作出反应。

  • 您可以通过以下 任何 方式 更新作业 及其引用的代码,而与创建或先前更新作业的方式无关。

    • 如果您具有容器映像,那么根据 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 在为作业开发源时处理本地源的构建。 然后,在映像成熟后,您可以更新作业以引用所需的特定映像。 您可以根据需要重复此过程。

    运行更新后的作业时,所引用容器映像的最新版本将用于作业运行,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于作业运行。

要查找更多代码示例吗? 请查看 样本 IBM Cloud Code Engine GitHub 存储库