Go Wiki:SlowBots

Go 構建系統支援“SlowBots”,這是一種配置 TryBots(預提交構建器)的方式,以便將額外的構建器新增到 TryBots 通常執行的構建配置集中。

通常情況下,TryBots 只執行那些快速且可彈性調配的構建。也就是說,TryBots 執行 Google Cloud 上可用版本的測試,我們在那裡擁有大量的容量,可以隨時啟動許多虛擬機器,廣泛地分片化測試執行,從而使 TryBots 在 5-10 分鐘內完成。

但有時這還不夠。SlowBots 允許您表示您願意長時間等待,直到某些特定的構建器可用。(某些配置通常只有一個物理機,並且經常堆積著工作,該構建器本身也可能很慢。)

使用 SlowBots

在提交訊息下方點選“選擇 Tryjobs”,然後會彈出一個對話方塊。

A red box indicating the location of the “Choose Tryjobs” button under the commit message.

對話方塊會要求您勾選您希望針對 CL 執行的構建的複選框。通常提交到 Go 主倉庫的 CL 通常需要以 gotip- 開頭的構建器。有關更多選項的詳細資訊,請參見下文

An example of the Choose Tryjobs dialog.

一旦您選擇了要執行的構建,有兩種方式可以觸發測試執行:

  • 阻塞式:這是推薦的方法。將對話方塊中顯示的 Cq-Include-Trybots git 頁尾新增到提交訊息的最後一段。對於透過 github 傳送的 CL,出現在 github PR 描述中的任何位置都可以。一旦上傳了帶有更新提交訊息的補丁集,像往常一樣投票 Commit-Queue+1。額外的構建被視為與預設 TryBots 相同:失敗將阻止提交併傳送電子郵件通知,並且構建將在後續補丁集中自動執行(只要 Cq-Include-Trybots 行保持不變)。請注意,如果 Cq-Include-Trybots git 頁尾不在提交訊息的最後一段,則不會使用它。也就是說,它必須**緊鄰 Change-Id 行,沒有空行**(見下圖)。
  • 僅供參考:點選“新增”按鈕將立即開始執行測試(即使沒有 Commit-Queue+1 投票)。這些完全是一次性的僅供參考的構建。狀態和結果將出現在“檢查”部分(見下圖),但失敗的結果不會阻止提交或傳送電子郵件通知。這些構建在上傳新的補丁集時不會自動再次執行。

An example of how to use Cq-Include-Trybots

審閱者工作流程

作為審閱者,您無法編輯提交訊息。如果一個您正在審閱的 CL 需要執行 SlowBots,我們推薦以下工作流程:

  1. 在“選擇 Tryjobs”對話方塊中選擇所需的構建。
  2. 點選“新增”以立即開始構建。
  3. 在提交訊息中新增一個未解決的評論,要求所有者將對話方塊中的確切 Cq-Include-Trybots 行新增到提交訊息中。

(2) 將在不等待所有者上傳新的補丁集的情況下,從測試結果中提供即時反饋,而 (3) 將確保測試在將來的補丁集中繼續執行並阻止提交。

注意:https://crbug.com/40287467 跟蹤了 LUCI 中改進此流程以減少工作量的問題。

SlowBot 名稱

每個構建的名稱大致表明了它的功能,但下面提供了一些更詳細的資訊。

  • 構建可能以 x_$REPO 開頭,其中 $REPO 是某個模組,如 golang.org/x/$REPO(例如 x_review-gotip-linux-amd64)。此構建將執行該倉庫中的測試。如果 CL 是針對 Go 主倉庫的,它將針對該版本的 Go 測試 $REPO 的當前 HEAD
  • 如果構建不以 x_$REPO 開頭(如 gotip-linux-amd64),它們將測試 Go 主倉庫(包括標準庫和工具鏈)。
  • 構建將始終列出要構建的 Go 版本,例如 gotipgo1.21。前者根據 Go 倉庫的 master 分支構建,後者根據相應釋出分支的 HEAD 構建。如果 CL 是針對 $REPO 的,那麼 $REPO 的測試將針對相應 Go 主倉庫分支的 HEAD 執行。
  • 然後,構建將列出要測試的作業系統和 CPU 架構(具體來說是 GOOSGOARCH)。
  • 最後,構建列出了一些修改,例如 gotip-linux-amd64-longtest-race。下面是一些修改及其含義的列表:
    • longtest 針對相應的平臺和倉庫執行完整的測試套件。
    • race 在競速檢測器下執行測試。
    • misccompile 將為所有支援的平臺交叉編譯所有包(包括測試包),作為一種煙霧測試。這些構建的平臺僅為交叉編譯的“主機”平臺。

目前列出的可能構建比實際支援或有效的要多得多。

以下是一些關於哪些 SlowBots 將按預期工作的通用指南:

  • 如果您正在為 golang.org/x/$REPO 倉庫之一的 CL 執行 SlowBots,那麼所有 x_$REPO-.* 構建器都將按預期工作。其他構建將失敗。
  • 如果您正在為 Go 主倉庫的 CL 執行 SlowBots,那麼所有與 CL 所屬分支匹配的構建都將正常工作。例如,如果您有一個針對 master 分支的 CL,那麼所有名稱包含 gotip 的構建都將按預期工作(x_tools-gotip-linux-amd64gotip-windows-amd64 等)。如果您有一個針對 release-branch.go1.21 分支的 CL,那麼所有名稱包含 go1.21 的構建都將按預期工作(x_tools-go1.21-linux-amd64go1.21-windows-amd64 等)。

待辦事項:自動應用這些指南作為過濾器。

LUCI 之前的 SlowBots

我們目前正在遷移到一個由 Chromium 專案建立的新開源 CI 系統 LUCI。以上說明描述瞭如何在 LUCI 上執行 SlowBots,但並非所有版本都已遷移到 LUCI。在此期間,這些版本仍在舊基礎設施上可用。下面是如何在舊基礎設施上使用 SlowBots 的說明。

  • 使用 Gerrit Web UI 回覆並選擇 Run-TryBot = +1,而不是 Commit-Queue = +1
  • 在點選“傳送”之前,在評論部分(在寫著“說點好聽的……”的地方)寫一個魔術評論。
TRY=ppc64le, freebsd, netbsd-386, ios, linux-arm64-packet

……其中 TRY= 後面的術語可以是:

  • GOOS(選擇最佳的)
  • GOARCH(選擇最佳的)
  • GOOS-GOARCH(選擇最佳的)
  • specific-builder-name(您透過其確切名稱指定;請參閱完整列表 https://farmer.golang.org/builders

對於 Go 主倉庫,TRY= 後面的術語也可以是:

  • x/repo,其中 repo 是 golang.org/x 倉庫之一,其測試應被執行。這將執行給定倉庫的預設構建器(目前是 linux-amd64)。
  • x/repo@builder,其中 repo 如上所示,builder 是來自構建器列表的構建器名稱。這將執行給定倉庫指定的構建器。例如,x/sys@linux-arm64-aws

再次執行 TryBots 時,將使用當前補丁集上最新的 TRY= 評論。要將其關閉,請將 TRY= 設定為等號後為空字串。如果當前補丁集沒有 TRY= 評論,則使用最新的 TRY= 評論。

LUCI 之前的 SlowBots 的陷阱

  • TRY= 評論如果不在啟動 TryBots 的同一條評論中,則會被忽略。
  • 如果已經存在 TryBot 結果,TryBots(和 SlowBots)將不會執行。
  • git-codereview mail 工具的 -trybot 標誌尚不支援此功能,請使用 Web UI。
  • 如果 TryBots 已經在執行,刪除 Run-TryBot+1 投票並重新執行它不會重新啟動 TryBot 集,因此它不會檢視您的 TRY= 行,直到下一次執行時才完成。(但您需要以某種方式刪除 TryBot 結果:手動、變基、上傳新版本)
  • 如果您選擇了一個離線構建器,它目前將永遠等待它出現。還沒有超時。
  • 如果您指定了一個未知的 TRY= 令牌,它將被忽略,而不會報告錯誤。
  • 沒有 all 別名。這在一定程度上是故意的,以防止過度使用導致 SlowBots 對所有人來說變得更慢。但我們可能稍後會新增它。請參閱 golang.org/issue/34501#issuecomment-544585711

此內容是 Go Wiki 的一部分。