IBM Cloud Docs
更新作业

更新作业

您可以对已定义的作业进行更改,并从控制台或使用 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

  1. 导航至您的工作页面。

    • Code Engine "项目" 页面中,单击项目的名称。 单击 作业 以处理作业和作业运行。
    • 从“作业”页面,单击 作业 选项卡,然后单击要更新的作业的名称。
  2. 配置 选项卡中,更新作业的图像引用。 提供映像的名称或配置映像。 将映像的名称从 icr.io/codeengine/firstjob 更新为 icr.io/codeengine/testjob。 单击部署

  3. 单击 提交作业

  4. 在“提交作业”窗格中,接受所有缺省值,然后再次单击 提交作业 以运行作业。

  5. 通过 从控制台查看此作业的作业日志,该作业的输出为 Hello World!

  6. 要再次更新作业并添加环境变量,请浏览至作业页面。

  7. 单击 环境变量 以打开选项卡,然后单击 添加环境变量。 添加名称为 TARGET 且值为 Sunshine 的字面值环境变量。 icr.io/codeengine/testjob 输出消息 Hello <value_of_TARGET>!>

  8. 单击完成

  9. 单击 保存 以保存对作业的更新。

  10. 单击 提交作业 以提交更新后的作业。

  11. 在“提交作业”窗格中,此时间将 CPU 值更改为指定内存的其中一个有效 CPU 选项。 请注意,必须使用 有效内存和 CPU 组合。 再次单击 提交作业 以运行此作业。 系统将在“作业详细信息”页面上显示作业的状态。 请注意作业详细信息的 Configuration 部分中更新的 CPU 值。

  12. 通过 从控制台查看此作业的作业日志,更新后的作业的输出为 Hello Sunshine!

使用 CLI 更新作业

通过 CLI,您可以更新现有作业配置或在新作业运行上指定更改。

使用 CLI 更新作业配置

您可以使用 ibmcloud ce job update 命令更新现有作业配置。

  1. 使用 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
    [...]
    
  2. 运行 ibmcloud ce jobrun submit 命令以运行引用此已更新作业配置的作业。 对于 jobrun submit 命令,请使用 --job 选项来引用已定义的作业配置。 虽然如果指定了 --job 选项,那么不需要 --name 选项,但以下示例命令指定 --name 选项以提供此作业运行的名称。

    ibmcloud ce jobrun submit --name myjobrun1 --job myjob
    
  3. 运行 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 命令重新提交引用先前作业运行的作业运行。

  1. 使用 jobrun resubmit 命令重新提交 myjobrun1 作业运行,并将数组下标从 0 更改为 1-4。 虽然 jobrun resubmit 命令不需要 --name 选项,但以下示例命令指定 --name 选项以提供此作业运行的名称。

    ibmcloud ce jobrun resubmit -jobrun myjobrun1 --array-indices "1-4" --name myjobrunresubmit
    
  2. 运行 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 提交 (或重新提交) 但未引用已定义作业配置的作业运行。