更新工作
您可以從主控台或 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.
-
請前往您的職缺頁面。
- 在 Code Engine 的「專案」頁面中,點選您的專案名稱。
- 按一下「工作」,然後按一下「工作」分頁。
- 請點擊您要更新的工作名稱。
-
從組態 > 環境變數索引標籤,按一下新增環境變數。 新增名稱為
TARGET且值為Sunshine的文字環境變數。icr.io/codeengine/helloworld會輸出訊息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 提交 (或重新提交) 且未參照已定義工作配置的工作執行無法從主控台檢視。