Go Wiki: SlowBots
Goビルドシステムは、「SlowBots」をサポートしています。これは、TryBots(事前提出ビルダ)を構成して、TryBotsが通常実行するビルド構成のセットに追加のビルダを追加する方法です。
通常、TryBotsは高速で弾力的にプロビジョニングされたものだけを実行します。つまり、TryBotsは、Google Cloudで大量の容量があり、必要に応じて多くのVMをスピンアップでき、テスト実行を広くシャード化してTryBotsを5〜10分で完了させることができる、利用可能なポートのテストを実行します。
しかし、時にはそれだけでは不十分です。SlowBotsを使用すると、特定のビルダセットが利用可能になるまで長時間待つことに同意することができます。(特定の構成では物理マシンが1つしかないことが多く、作業のバックログが溜まっていることが多く、そのビルダも遅い場合があります。)
SlowBotsの使用
コミットメッセージの下にある「Choose Tryjobs」をクリックすると、ダイアログが表示されます。
ダイアログでは、CLに対して実行したいビルドのチェックボックスをクリックするよう求められます。メインのGoリポジトリへの通常のCLでは、gotip-
で始まるビルダが必要になります。下記参照 オプションの詳細については。
実行したいビルドを選択したら、テスト実行をトリガーする方法は2つあります。
- ブロッキング:これは推奨されるアプローチです。ダイアログに表示されている
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を実行する必要がある場合は、次のワークフローをお勧めします。
- 「Choose 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
に対して実行されます。 - ビルドは、次にテスト対象のOSとCPUアーキテクチャ(具体的には、
GOOS
とGOARCH
)をリストします。 - 最後に、ビルドは、
gotip-linux-amd64-longtest-race
などの修正をリストします。以下は、修正の一部とその意味のリストです。longtest
は、対応するプラットフォームとリポジトリの完全なテストスイートを実行します。race
は、race detectorの下でテストを実行します。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
など)は期待どおりに機能します。
TODO:これらのガイドラインをフィルターとして自動的に適用する。
LUCI以前のSlowBots
現在、Chromiumプロジェクトによって作成された新しいオープンソースCIシステムであるLUCIへの移行中です。上記の指示は、LUCIでSlowBotsを実行する方法について説明していますが、まだすべてのポートがLUCIに移行されているわけではありません。その間、これらのポートは古いインフラストラクチャで引き続き利用できます。以下は、古いインフラストラクチャでSlowBotsを使用する方法に関する手順です。
- Gerrit Web UIを使用して返信し、
Commit-Queue
=+1
の代わりにRun-TryBot
=+1
を選択します。 - 「送信」をクリックする前に、コメントセクション(Say something nice…と表示されている場所)に魔法のコメントを書きます。
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リポジトリの1つです。これにより、指定されたrepoのデフォルトのビルダ(執筆時点ではlinux-amd64
)が実行されます。x/repo@builder
。ここでrepo
は上記と同じで、builder
はビルダリストからのビルダ名です。これにより、指定されたrepoの指定されたビルダが実行されます。たとえば、x/sys@linux-arm64-aws
。
後でTryBotsを再度実行する場合、現在のパッチセットの最新のTRY=
コメントが使用されます。無効にするには、等号の後に空文字列でTRY=
を設定します。現在のパッチセットにTRY=
コメントがない場合、最新のTRY=
コメントが使用されます。
LUCI以前のSlowBotsの落とし穴
TRY=
コメントは、TryBotsを開始したのと同じコメントにない場合は無視されます。- TryBot(およびSlowBots)は、すでにTryBot-Resultがある場合は実行されません。
git-codereview mail
ツールの-trybot
フラグはまだこれをサポートしていないため、Web UIを使用してください。- TryBotsがすでに実行されている場合、
Run-TryBot+1
投票を削除して再実行しても、TryBotセットは再起動されません。そのため、完了するまで次の実行時までTRY=
行は確認されません。(ただし、TryBot-Resultを何らかの方法で削除する必要があります:手動、リベース、新しいバージョンのアップロード) - オフラインのビルダを選択した場合、現在はそのビルダが表示されるまで永遠に待ちます。タイムアウトはまだありません。
- 不明な
TRY=
トークンを指定した場合、単に無視され、エラーは報告されません。 all
エイリアスはありません。これは、SlowBotsを全員にとってさらに遅くしてしまう可能性のある過剰使用を防ぐために意図的なものです。ただし、後で追加される可能性があります。golang.org/issue/34501#issuecomment-544585711を参照。
このコンテンツは、Go Wikiの一部です。