設定執行的佇列行為 - Amazon CodeCatalyst

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定執行的佇列行為

根據預設 CodeCatalyst,在 Amazon 中,當多個工作流程同時執行時,將它們排入 CodeCatalyst 佇列,並按照啟動的順序逐一處理。您可以透過指定執行模式來變更此預設行為。有幾種運行模式:

  • (預設) 佇列執行模式 — CodeCatalyst 程序逐一執行

  • 被取代的運行模式- CodeCatalyst 進程逐個運行,較新的運行超過舊的運行

  • 並行運行模式- CodeCatalyst 進程並行運行

如需工作流程執行的更多資訊,請參閱執行工作流程

關於排入佇列的執行模式

佇列執行模式中,執行會以串列方式發生,等待執行會形成佇列。

佇列會在動作和動作群組的進入點處形成,因此您可以在同一個工作流程中擁有多個佇列 (請參閱Figure 1)。當排入佇列的執行進入動作時,該動作將被鎖定,且其他執行都無法進入。當執行完成並結束動作時,動作會變成解除鎖定,並準備好進行下一次執行。

Figure 1說明了在佇列執行模式中配置的工作流程。它顯示:

  • 七個運行通過工作流程他們的方式.

  • 兩個佇列:一個位於輸入來源項目之外 (RePO: Main),另一個佇列位於動作項目之外。BuildTestActionGroup

  • 兩個鎖定的塊:輸入源(REPO:主)和. BuildTestActionGroup

以下是工作流程運行完成處理時,事情將如何發生:

  • Run-4D444 完成複製來源儲存庫時,它將結束輸入來源並加入 Run-3C333 後面的佇列。然後,運行 5E555 將進入輸入源。

  • 運行 1A111 完成構建和測試時,它將退出BuildTestActionGroup操作並進入操作。DeployAction然後,運行 -2B2222 將進入該動作。BuildTestActionGroup

圖 1:在「排隊運行模式」中配置的工作流

在「排隊運行模式」中配置的工作流

在下列情況下使用佇列執行模式:

  • 您想要在圖徵和管路之間保持 one-to-one 關係 — 使用取代模式時,這些特徵可能會被分組。例如,當您在提交 1 中合併圖徵 1 時,執行 1 開始,並在提交 2 中合併圖徵 2 時,執行 2 開始,依此類推。如果您要使用取代模式而不是排隊模式,則您的功能(和提交)將在運行中分組在一起,以取代其他功能。

  • 您想要避免使用 parallel 模式時可能發生的競爭狀況和未預期的問題。例如,如果兩個軟體開發人員 Wang 和 Saanvi 在大致同一時間執行工作流程以部署到 Amazon ECS 叢集,則 Wang 的執行可能會在叢集上開始整合測試,而 Sanvi 的執行則會將新的應用程式程式碼部署到叢集,導致 Wang 的測試失敗或測試錯誤的程式碼。作為另一個例子,您可能有一個沒有鎖定機制的目標,在這種情況下,這兩個運行可能會以意想不到的方式覆蓋彼此的更改。

  • 您想要限制 CodeCatalyst 用來處理執行的運算資源的負載。例如,如果您的工作流程中有三個動作,則最多可以同時發生三個執行。對一次可能發生的執行次數施加限制,可讓執行輸送量更加可預測。

  • 您想要限制工作流程對第三方服務提出的要求數量。例如,您的工作流程可能具有構建操作,其中包含從 Docker Hub 提取映像的說明。Docker Hub 將您可以發出的提取請求數量限制為每個帳戶每小時的特定數量,如果超出限制,您將被鎖定。使用佇列執行模式減慢執行輸送量,每小時對 Docker Hub 產生的要求會減少,因此會限制鎖定以及造成建置和執行失敗的可能性。

最大佇列大小:50

佇列大小上限的注意事項:

  • 佇列大小上限是指工作流程中所有佇列允許的最大執行次數。

  • 如果佇列的執行時間超過 50 次,則會 CodeCatalyst 捨棄第 51 次及後續執行。

失敗行為

如果執行在動作處理時變得沒有回應,則其後面的執行會保留在佇列中,直到動作逾時為止。動作會在一小時後逾時。

如果在動作中執行失敗,則允許在其後面排入佇列的第一個執行繼續。

關於已取代的執行模式

已取代的執行模式排入佇列的執行模式相同,不同之處在於:

  • 如果佇列的執行追蹤到佇列中的另一個執行,則稍後的執行會取代 (接管) 先前的執行,而先前的執行會被取消並標示為「已取代」。

  • 作為第一個 bullet 中描述的行為的結果,當使用取代的運行模式時,隊列只能包含一次運行。

使用中的工作流程作Figure 1為指南,將已取代的執行模式套用至此工作流程會產生下列結果:

  • Run-7g777 將取代其隊列中的其他兩個運行,並且將是隊列 #1 中唯一剩餘的運行。運行 6F666 和運行- 5E555 將被取消。

  • 運行 3C333 將取代運行 2b222,並成為唯一剩餘在佇列 #2 中的運行運行 -2b222 將被取消。

如果需要,請使用已取代的執行模式:

  • 比排隊模式更好的吞吐量

  • 與排隊模式相比,對第三方服務的請求甚至更少;如果第三方服務具有速率限制(例如 Docker Hub),則這很有利

關於 parallel 執行模式

parallel 執行模式中,執行彼此獨立,而且在開始之前不要等待其他執行完成。沒有佇列,執行輸送量只受工作流程內動作完成的速度所限制。

在每個使用者都有自己的功能分支,並部署至其他使用者未共用的目標的開發環境中使用 parallel 執行模式。

重要

如果您有多個使用者可以部署到的共用目標 (例如生產環境中的 Lambda 函數),請勿使用 parallel 模式,因為可能會導致競爭情形。當 parallel 工作流程執行嘗試同時變更共用資源,導致無法預期的結果時,就會發生爭用情形。

parallel 執行的最大數目:每個 CodeCatalyst空間 1000

設定執行模式

您可以將執行模式設定為已排入佇列、已取代或 parallel。預設值為佇列。

當您將執行模式從佇列中變更或已取代為 parallel 時,會 CodeCatalyst 取消排入佇列的執行,並允許動作目前正在處理的執行完成,然後再取消它們。

當您將執行模式從 parallel 變更為佇列或已取代時,會 CodeCatalyst 讓所有目前執行的 parallel 執行完成。您在將執行模式變更為佇列或已取代之後啟動的任何執行都會使用新模式。

Visual
使用視覺化編輯器變更執行模式
  1. 請在以下位置開啟 CodeCatalyst 主控台。 https://codecatalyst.aws/

  2. 選擇您的專案。

  3. 在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  4. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選,或依工作流程名稱或狀態進行篩選。

  5. 選擇編輯

  6. 在右上角,選擇「工作流程屬性」。

  7. 展開「進階」,然後在「執行」模式下,選擇下列其中一項:

    1. 已排入佇列 — 請參閱 關於排入佇列的執行模式

    2. 已取代 — 請參閱 關於已取代的執行模式

    3. 平行 — 請參閱 關於 parallel 執行模式

  8. (選擇性) 選擇「驗證」,在確認之前驗證工作流程的程YAML式碼。

  9. 選擇「確認」,輸入確認訊息,然後再次選擇「確認」。

YAML
使用YAML編輯器變更執行模式
  1. 請在以下位置開啟 CodeCatalyst 主控台。 https://codecatalyst.aws/

  2. 選擇您的專案。

  3. 在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  4. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選,或依工作流程名稱或狀態進行篩選。

  5. 選擇編輯

  6. 選擇YAML

  7. 添加屬RunMode性,如下所示:

    Name: Workflow_6d39 SchemaVersion: "1.0" RunMode: QUEUED|SUPERSEDED|PARALLEL

    如需詳細資訊,請參閱的一頂層屬性節中的RunMode屬性說明工作流YAML定義

  8. (選擇性) 選擇「驗證」,在確認之前驗證工作流程的程YAML式碼。

  9. 選擇「確認」,輸入確認訊息,然後再次選擇「確認」。