更新工作

您可以從主控台或 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/helloworld 範例工作時,工作會讀取環境變數 TARGET 並列印 "Hello ${TARGET}!"。 若此環境變數為空,則會傳回 "Hello World!"。 如需更多關於本範例所用程式碼的資訊,請參閱 helloworld.

  1. 請前往您的職缺頁面。

    1. Code Engine 的「專案」頁面中,點選您的專案名稱。
    2. 按一下「工作」,然後按一下「工作」分頁。
    3. 請點擊您要更新的工作名稱。
  2. 組態 > 環境變數索引標籤,按一下新增環境變數。 新增名稱為 TARGET 且值為 Sunshine 的文字環境變數。 icr.io/codeengine/helloworld 會輸出訊息 Hello <value_of_TARGET>!>

  3. 按一下新增,以新增您的環境變數。

  4. 按一下部署

  5. 按一下 提交工作

  6. 從「提交工作」窗格中,這次將 CPU 值變更為所指定記憶體的其中一個有效 CPU 選項。 請注意,您必須使用 有效的記憶體及 CPU 組合。 再次按一下 提交工作,以執行此工作。 系統會在「工作詳細資料」頁面上顯示工作的狀態。 請注意工作詳細資料的 Configuration 區段中更新的 CPU 值。

  7. 透過針對此工作 從主控台檢視工作日誌,已更新工作的輸出為 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 提交 (或重新提交) 且未參照已定義工作配置的工作執行無法從主控台檢視。