Go Wiki: DashboardBuilders

LUCIビルダー

Goチームは、カスタムソリューションであるコーディネーターからLUCIにテストパイプラインを移行しました。LUCIは、GoogleのChromeオープンソースチームによって作成されたオープンソースの継続的インテグレーションシステムです。Goチームは、より多くの開発者によって使用およびサポートされている継続的インテグレーションソリューションを活用するために、LUCIの採用を決定しました。これにより、チームはコミュニティにより機能豊富なソリューションを提供できるようになります。

LUCIシステムでは、ビルダーがLUCIに認証され、ビルドを受信して処理する2つのアプリケーションを実行する必要があります。LUCIトークンデーモンは、認証に必要なトークンを生成します。スワーミングボットは、トークンを使用してLUCIに接続し、ビルドを処理します。

ビルダーの要件

ビルダーの設定方法

  1. 新しいビルダーの追加を要求するGo IssueトラッカーにIssueを作成し、自身に割り当てます。

    1. Issueのタイトルは、x/build: add LUCI <os-arch> builderの形式にする必要があります。
    2. ホスト名を選択し、Issue本文にその値を記載します。ホスト名は<GOOS>-<GOOARCH>-<メインテナのGitHubハンドル>の形式に従う必要があります。名前の競合がある場合は、Goチームが変更を要求することがあります。
    3. 「new-builder」ラベルを追加します。(Issueにコメントを投稿して@gopherbot, please add label new-builder.と入力すると、gopherbotがラベルを追加します。)
  2. golang.org/x/build/cmd/genbotcertを使用して、事前に選択したホスト名を入力として、証明書署名要求(_hostname_.csr)とTLS秘密キー(_hostname_.key)の両方を作成します。証明書署名要求(_hostname_.csr.txt)に.txtファイル拡張子を追加し、GitHub Issueに添付します。チームメンバーが生成された証明書(_hostname_.cert)をGitHub Issueに添付します。

    1. genbotcert -bot-hostname <hostname>
  3. GoチームメンバーがLUCIで新しいビルダーを定義します。完了すると、Issueにコメントが追加されます。

  4. マシンโทเค็นデーモンはโทเค็นサーバーと通信して、LUCIマシンโทเค็นを生成および更新します。go.chromium.org/luci/tokenserver/cmd/luci_machine_tokendをインストールし、cronを使用して10分ごとに実行されるように設定します。秘密キーはswarmingユーザーから読み取れないようにする必要があるため、cronジョブは別のユーザーとして実行する必要があります。

    1. luci_machine_tokend -backend luci-token-server.appspot.com -cert-pem <path-to-the-certificate> -pkey-pem <path-to-the-private-key> -token-file=/var/lib/luci_machine_tokend/token.json
    2. /var/libがโทเค็นに適した場所ではない場合は、必要に応じて変更し、下記のbootstrapswarmを呼び出す際に環境変数LUCI_MACHINE_TOKENをファイルパスに設定します。
  5. golang.org/x/build/cmd/bootstrapswarmをインストールし、オペレーティングシステムのプロセススーパーバイザー(systemdなど)の下でswarmingユーザーとしてループで実行されるように設定します。Bootstrapswarmは、スワーミングボットの初期バージョンをダウンロードし、常に実行されていることを確認します。

    1. bootstrapswarm -hostname <hostname>
  6. ログにエラーがないことを確認してボットが起動します。

セキュリティに関する注意事項

一般的に、低容量のビルダーは、すでにレビューされ、提出済みのコードのみを実行します(提出後テスト)。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の一部です。