Go Wiki: DashboardBuilders
LUCI ビルダー
Go チームは、テストパイプラインをカスタムソリューションであるコーディネーターから LUCI に移行しました。LUCI は、Google の Chrome オープンソースチームによって作成されたオープンソースの継続的インテグレーションシステムです。Go チームは、より多くの開発者グループによって使用され、サポートされている継続的インテグレーションソリューションを活用するために LUCI の使用を採用しました。これにより、チームはコミュニティにより多くの機能豊富なソリューションを提供できるようになるはずです。
LUCI システムは、ビルダーが LUCI に対して認証を行い、ビルドを受信して処理する 2 つのアプリケーションを実行することを要求します。LUCI トークンデーモンは、認証に必要なトークンを生成します。スワーミングボットは、トークンを使用して LUCI に接続し、ビルドを処理します。
ビルダーの要件
- 以下に接続できるインターネット接続
- https://proxy.golang.org (または GOPROXY を介した代替プロキシ)。
- https://luci-token-server.appspot.com
- https://chromium-swarm.appspot.com
- https://cr-buildbucket.appspot.com
- https://7419-34ac013-dot-chromium-swarm.appspot.com (将来変更される可能性あり?)
- https://remotebuildexecution.googleapis.com
- https://storage.googleapis.com ( gomote の作成用)
- リソース
- 最低 512MB のメモリ。1GB 以上を強く推奨します。
- 20GB のディスク容量が理想的です。
- 2 つ以上の (V)CPU を推奨。
- Python 3 がインストールされ、
PATH(または同等のもの) にpython3(Windows ではpython3.exe) という名前で利用可能であること。 - 権限
- ボットは
swarmingユーザー (root 権限なし) として実行する必要があります。 - ボットは自動的に自身を更新します。これを行う権限が必要です。
- ボットは定期的にマシンを再起動します。これを行う権限が必要です (sudo 経由)。
- Docker の下では、シャットダウンコマンドを コンテナを再起動するシェルスクリプト (例) に置き換えることができます。
- 何らかの理由でマシンを再起動できない場合は、環境変数
SWARMING_NEVER_REBOOTを設定します。
- ボットは
ビルダーの設定方法
-
新しいビルダーの追加を要求し、自分にアサインする Go Issue tracker で issue を作成します。
- issue のタイトルは
x/build: add LUCIの形式である必要があります。builder - ホスト名を選択し、その値を issue の本文に記述します。ホスト名は
の形式に従う必要があります。名前との競合がある場合、Go チームは変更を要求する場合があります。- - - 「new-builder」ラベルを追加します。(issue に
@gopherbot, please add label new-builder.とコメントを投稿すると、gopherbot が追加してくれます。)
- issue のタイトルは
-
golang.org/x/build/cmd/genbotcertを使用して、ホスト名 (事前に選択したもの) を入力として、証明書署名要求 (hostname.csr) と TLS プライベートキー (hostname.key) の両方を生成します。証明書署名要求 (hostname.csr.txt) に .txt ファイル拡張子を追加し、GitHub issue に添付します。チームメンバーが結果の証明書 (hostname.cert) を GitHub issue に添付します。genbotcert -bot-hostname <hostname>
-
Go チームメンバーが LUCI で新しいビルダーを定義します。これが完了すると、issue にコメントが追加されます。
-
マシン・トークン・デーモンは、トークン・サーバーと通信して LUCI マシン・トークンを生成および更新します。
go.chromium.org/luci/tokenserver/cmd/luci_machine_tokendをインストールし、cron を介して 10 分ごとに実行するように設定します。プライベートキーはswarmingユーザーが読み取ることができないため、cron ジョブは別のユーザーとして実行する必要があります。luci_machine_tokend -backend luci-token-server.appspot.com -cert-pem <パス-証明書> -pkey-pem <パス-プライベートキー> -token-file=/var/lib/luci_machine_tokend/token.json- /var/lib がトークンに適さない場所である場合、適切に変更し、以下の
bootstrapswarmを呼び出すときに環境変数LUCI_MACHINE_TOKENをファイルパスに設定します。
-
golang.org/x/build/cmd/bootstrapswarmをインストールし、オペレーティングシステムのプロセススーパーバイザー (systemd など) の下でswarmingユーザーとしてループで実行するように設定します。Bootstrapswarmはスワーミングボットの初期バージョンをダウンロードし、常に実行されていることを保証します。bootstrapswarm -hostname <hostname>
-
ログにエラーがなくボットが起動することを確認します。
セキュリティに関する注意点
通常、低容量のビルダーは、すでにレビューおよび提出されたコード (ポストコミットテスト) のみを実行します。大量のハードウェアを利用できる Go チームが実行するビルダーに対してのみ、プレコミットテストを有効にします。ただし、Gomote ツールは、Go チームおよび Go コミュニティの多くの人々が利用でき、開発およびデバッグのためにビルダーへの任意のアクセスを許可します。
念のため、ビルダーを内部リソースにアクセスできない分離されたネットワークで実行したい場合があります。
コーディネータービルダー (レガシー)
このセクションでは、LUCI への移行前に Go プロジェクトで以前使用されていたカスタムテストソリューションについて説明します。
ビルド設定 (上部) とホスト設定 (下部) がここにリストされています
https://farmer.golang.org/builders
ビルダーは特定のホストタイプで実行されます。(例: linux-386-387 はビルドタイプです。これは Kubernetes ベースの linux/amd64 ホストである host-linux-kubestd で実行されます)
それらはファイル https://cs.opensource.google/go/x/build/+/master:dashboard/builders.go から来ています
コーディネーターの設計詳細については、https://go.dokyumento.jp/s/builderplan を参照してください
ビルダーマシンの情報、稼働している数、およびそのステータスは https://farmer.golang.org/ で確認できます
このコンテンツはGo Wikiの一部です。