Go Wiki:SlowBots
Go 建置系統支援「SlowBots」,這是一種設定 TryBots(提交前建置器)的方式,用以將其他建置器新增至通常由 TryBots 執行的一組建置組態。
TryBots 通常只執行快速且具有彈性配置的項目。換句話說,TryBots 會執行 Google Cloud 上的可用埠測試,該處擁有大量容量,且可以隨意準備大量 VM,廣泛分片執行測試,讓 TryBots 在 5-10 分鐘內完成。
但有時候這樣還不夠。使用 SlowBots 會讓您了解在特定建置器組可用前,您可以耐心等待更長時間。(某些組態經常只有一個實際機器,經常有待完成的工作,而且該建置器可能也較慢。)
使用 SlowBots
按一下提交訊息下的「選擇 Tryjobs」,對話框就會出現。
對話框會請您按一下核取方塊,勾選您想要針對自己的 CL 執行的建置。提交至主要 Go 儲存庫的典型 CL 通常需要以 gotip-
開頭的建置器。請 參閱下方 以取得更多選項的詳細說明。
選取您要執行的建置後,有以下兩種類型可以觸發測試執行
- 封鎖:建議使用此方法。在提交訊息最後一段加入對話框中顯示的 git 註腳
Cq-Include-Trybots
。如果是透過 github 傳送變更清單,則可以在 github PR 的描述中的任何位置加入。上傳包含更新提交訊息的修補程式集後,照常投票Commit-Queue+1
。這些額外建置會與預設 TryBots 以相同方式處理:失敗將會封鎖提交並發送電子郵件通知,而且這些建置將會在後續修補程式集上自動執行(只要Cq-Include-Trybots
指令保持存在)。請注意,如果Cq-Include-Trybots
git 註腳不在提交訊息的最後一段,則不會使用它。換句話說,它必須緊鄰Change-Id
指令,中間不能有空行(請參閱下方的螢幕截圖)。 - 僅供參考:按一下「新增」按鈕將會立即開始執行測試(即使沒有
Commit-Queue+1
投票)。這些建置是純一次性的僅供參考建置,狀態和結果會出現在「檢查」區段(請參閱下方的螢幕截圖),但失敗的結果不會封鎖提交或發送電子郵件通知。上傳新的修補程式集時,這些建置不會自動重新執行。
審閱流程
作為審閱者,您無法編輯提交訊息。如果準備審閱的變更清單應執行 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
)。此建置將會執行該儲存庫中的測試。如果變更清單是針對主要 Go 儲存庫,它將會針對 Go 的該版本測試$REPO
的目前HEAD
。 - 如果建置的開頭不是
x_$REPO
(例如gotip-linux-amd64
),則代表它們會測試主要 Go 儲存庫(包括標準程式庫和工具鏈)。 - 建置會持續列出要建置的 Go 版本,例如『gotip』或『go1.21』。前者針對 Go 主要儲存庫的『master』分支進行建置,而後者則針對對應發行版本分支的『HEAD』進行建置。如果 CL 來自『$REPO』,則會針對對應主要 Go 儲存庫分支的『HEAD』執行『$REPO』測試。
- 建置會列出要測試的操作系統與 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
我們目前正在將系統遷移至名為 LUCI 的建置系統,是由 Chromium 專案建立的全新開源 CI 系統。以上說明介紹如何在 LUCI 上執行 SlowBots,但尚未將所有埠都遷移到 LUCI。在此過渡期間,這些埠仍然可在舊的基礎架構上使用。以下是如何在舊的基礎架構上使用 SlowBots 的說明。
- 請使用 Gerrit 網路使用者介面回覆,並選擇『執行 TryBot』= 『+1』,而非『提交佇列』= 『+1』。
- 在按「傳送」之前,請在留言區段中 (顯示為「說些好聽的…」的地方) 寫入魔法留言
TRY=ppc64le, freebsd, netbsd-386, ios, linux-arm64-packet
… 在『TRY=』後的字詞為
- 『GOOS』 (挑選最佳的一個)
- 『GOARCH』 (挑選最佳的一個)
- 『GOOS-GOARCH』 (挑選最佳的一個)
- 『具體的建置器名稱』 (您可以根據確切名稱明確指定;請參閱 https://farmer.golang.org/builders 中的完整清單)
針對主要的 Go 存放庫,TRY=
之後的詞彙也可以是
x/repo
,其中repo
是 golang.org/x 存放庫之一,其測試應予以執行。這會為特定的 repo 執行預設的建構器(截至撰寫內容為linux-amd64
)。x/repo@builder
,其中repo
如上所述而builder
是 建構器清單 中的一個建構器名稱。這會針對特定的 repo 執行指定的建構器。例如x/sys@linux-arm64-aws
。
稍後重新執行 TryBot 時,會使用目前補丁集上最新的 TRY=
資訊。若要停用它,請在等號後方設定空的字串來設定 TRY=
。如果目前的補丁集沒有 TRY=
資訊,會使用最新的 TRY=
資訊。
使用 Pre-LUCI SlowBot 的陷阱
- 如果
TRY=
資訊並非在啟動 TryBot 的同一個註解中,將會予以忽略 - 如果已存在 TryBot-Result,TryBot(及其 SlowBot)不會執行
git-codereview mail
工具的-trybot
旗標尚未支援此功能,因此請改用 WebUI。- 如果 TryBot 已在執行中,刪除
Run-TryBot+1
投票並重新執行它不會重新啟動 TryBot 的設定,因此它不會檢視你的 TRY= 設定,直到完成下一次執行為止。(不過你必須透過手動、重新基底化、上傳新版本來刪除 TryBot-Result) - 如果你選擇一個離線的建構器,它目前只會無限期地等待該建構器出現。目前尚未設定逾時機制。
- 如果你指定了不明的
TRY=
令牌,它會將它忽略,且不會回報錯誤。 - 並無「全部」別名。這是特意設計,以避免過度使用,這可能會讓 SlowBot 對所有人都更為遲緩。不過我們可能會在稍後新增。請參閱 golang.org/issue/34501#issuecomment-544585711。
此內容是 Go Wiki 的一部分。