Go Wiki:SlowBots
Go 構建系統支援“SlowBots”,這是一種配置 TryBots(預提交構建器)的方式,以便將額外的構建器新增到 TryBots 通常執行的構建配置集中。
通常情況下,TryBots 只執行那些快速且可彈性調配的構建。也就是說,TryBots 執行 Google Cloud 上可用版本的測試,我們在那裡擁有大量的容量,可以隨時啟動許多虛擬機器,廣泛地分片化測試執行,從而使 TryBots 在 5-10 分鐘內完成。
但有時這還不夠。SlowBots 允許您表示您願意長時間等待,直到某些特定的構建器可用。(某些配置通常只有一個物理機,並且經常堆積著工作,該構建器本身也可能很慢。)
使用 SlowBots
在提交訊息下方點選“選擇 Tryjobs”,然後會彈出一個對話方塊。
對話方塊會要求您勾選您希望針對 CL 執行的構建的複選框。通常提交到 Go 主倉庫的 CL 通常需要以 gotip-
開頭的構建器。有關更多選項的詳細資訊,請參見下文。
一旦您選擇了要執行的構建,有兩種方式可以觸發測試執行:
- 阻塞式:這是推薦的方法。將對話方塊中顯示的
Cq-Include-Trybots
git 頁尾新增到提交訊息的最後一段。對於透過 github 傳送的 CL,出現在 github PR 描述中的任何位置都可以。一旦上傳了帶有更新提交訊息的補丁集,像往常一樣投票Commit-Queue+1
。額外的構建被視為與預設 TryBots 相同:失敗將阻止提交併傳送電子郵件通知,並且構建將在後續補丁集中自動執行(只要Cq-Include-Trybots
行保持不變)。請注意,如果Cq-Include-Trybots
git 頁尾不在提交訊息的最後一段,則不會使用它。也就是說,它必須**緊鄰Change-Id
行,沒有空行**(見下圖)。 - 僅供參考:點選“新增”按鈕將立即開始執行測試(即使沒有
Commit-Queue+1
投票)。這些完全是一次性的僅供參考的構建。狀態和結果將出現在“檢查”部分(見下圖),但失敗的結果不會阻止提交或傳送電子郵件通知。這些構建在上傳新的補丁集時不會自動再次執行。
審閱者工作流程
作為審閱者,您無法編輯提交訊息。如果一個您正在審閱的 CL 需要執行 SlowBots,我們推薦以下工作流程:
- 在“選擇 Tryjobs”對話方塊中選擇所需的構建。
- 點選“新增”以立即開始構建。
- 在提交訊息中新增一個未解決的評論,要求所有者將對話方塊中的確切
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 版本,例如
gotip
或go1.21
。前者根據 Go 倉庫的master
分支構建,後者根據相應釋出分支的HEAD
構建。如果 CL 是針對$REPO
的,那麼$REPO
的測試將針對相應 Go 主倉庫分支的HEAD
執行。 - 然後,構建將列出要測試的作業系統和 CPU 架構(具體來說是
GOOS
和GOARCH
)。 - 最後,構建列出了一些修改,例如
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-amd64
、gotip-windows-amd64
等)。如果您有一個針對release-branch.go1.21
分支的 CL,那麼所有名稱包含go1.21
的構建都將按預期工作(x_tools-go1.21-linux-amd64
、go1.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 的一部分。