Runner グループ - チームリソース
概要
このページの目的は、Runner グループの日々の業務に必要なリソースをドキュメント化することです。
おすすめのブックマーク
- チームハンドブック
- 社内エンジニアリングハンドブック
- Runner SaaS HQ Issue
- 公開 Runner ドキュメント
- 公開開発ドキュメント
- Runner ランブック
- GitLab.com トリアージ(状況把握用)
- ブループリント(
runnerで検索)
私たちがメンテナンスするプロジェクト
チームとして複数のプロジェクトをメンテナンスしています。https://gitlab.com/gitlab-com/runner-maintainers グループは各プロジェクトにメンテナー権限で追加されています。また、各プロジェクト間でツールとバージョンを統一するよう努めています。
プロダクトプロジェクト
- GitLab Runner
- GitLab Runner Operator for Kubernetes
- GitLab Runner Helm Chart
- GitLab Runner UBI オフラインビルド
Runner コンポーネントプロジェクト
- Taskscaler
- Fleeting
- Fleeting Plugin AWS
- Fleeting Plugin Google Compute
- Fleeting Plugin Azure
- Fleeting Plugin Static
- Nesting
- Docker Machine(フォーク)
- Custom Executor Autoscaler
CI Steps プロジェクト
ヘルパープロジェクト
- リンター
- テスト
- リリース
- メンテナンス
Runner の公開 API に依存する GitLab プロジェクト
以下のプロジェクトは Runner の公開 API に依存しており、公開 API への変更・廃止を行う際にはその範囲として考慮する必要があります:
| プロジェクト | API |
|---|---|
| GitLab Terraform プロバイダー | REST API |
| GitLab CLI | REST API |
セキュリティプロセス(CVE 脆弱性報告 Issue の管理)
CVE 脆弱性 Issue の管理は、GitLab の脆弱性管理の取り組み (1、 2)の一部であり、 GitLab FedRAMP 認証を維持するための重要な要素です。
container-scanners プロジェクトを使用して、GitLab は私たちが生成するすべてのイメージをスキャンし、CVE 脆弱性を検出します。これらのスキャンから、
vulnmapper
プロジェクトが脆弱なイメージを作成したプロジェクトに Issue を作成し、遵守すべき SLA を含みます。
週次チームタスクで Support & Security Responder の役割を担当する Runner チームメンバーが CVE のリストをトリアージし、レビューして、適切に Issue に対処する必要があります:
Critical(重大)の severity の Issue は即座に対処する必要があります。High(高)、Medium(中)、Low(低)の severity の Issue は、修正 SLA の優先順位に従って対処する必要があります。
CVE Issue への対処手順は次のとおりです:
アクティブな脆弱性報告の表示
- 次のいずれかを使用して、チームに割り当てられたアクティブな CVE Issue を表示します:
cver imageVulnsコマンド多くの Issue が同じ CVE 脆弱性報告を参照しています。同じ脆弱性報告の Issue をグループ化してまとめて対処するのが最善です。
- CVE 報告を優先順位に従って対処し、
critical、high、mediumの severity を最初に処理します。以下の手順に従ってください:- 共通 / 関連する Issue のグループごとに、関連する CVE がまだ有効かどうかを確認します。これは、
trivyやgrypeなどのツールで Issue に示された画像のlatestバージョンをスキャンし、trivyやgrypeのスキャンに Issue で参照されている CVE が現れるかどうかを確認することで行えます。 - 関連する画像の
trivyまたはgrypeスキャンで脆弱性が報告されなくなった場合、Issue をクローズできます。上記のcver内部ツールはこのタスクをほぼ自動化しており、関連する Issue のクローズも含まれます(ドキュメントを参照)。 - 関連する画像に脆弱性がまだ存在する場合は対処する必要があります。
- 共通 / 関連する Issue のグループごとに、関連する CVE がまだ有効かどうかを確認します。これは、
gitlab-runner または gitlab-runner-helper 画像の ubi-fips フレーバーを参照する Issue は、他の画像フレーバー(alpine や ubuntu など)よりも優先されます。これは GitLab FedRAMP 認証が ubi-fips 画像のみに依存しているためです。
アクティブな脆弱性報告への対処
脆弱性は通常、以下の 3 つのタイプのいずれか(発生頻度の高い順)で現れます:
- サードパーティ OS パッケージ(
gitやgit-lfsなど)に脆弱性が存在する gitlab-runnerの依存関係に脆弱性が存在するgitlab-runnerの私たちが書いたコードに脆弱性が存在する
サードパーティ OS パッケージ
この場合、脆弱性は:
- アップストリームで修正されていない
- アップストリームで修正されているが、修正を含む OS パッケージがまだ作成・公開されていない
- アップストリームで修正されない予定
主な対処方針は、deviation request issue
を作成することです(
https://handbook.gitlab.com/handbook/security/security-assurance/security-compliance/poam-deviation-request-procedure/
を参照)。一般に、問題のあるソフトウェアモジュール(例: git-lfs や libcurl)ごとに 1 つの deviation request Issue を作成します。Issue を作成する際は、必ず operational_requirement_template をテンプレートとして選択し、以下のセクションを記入してください:
- 影響を受けるイメージ
- 脆弱性の詳細(関連する CVE 報告ごとに 1 行)
- 関連する
vulnmapperIssue - 理由
deviation request Issue が作成されたら、次を追加してください:
関連するすべての
gitlab-runnerIssue への deviation request Issue へのメモラベル
FedRAMP::DR Status::Openこのリストから最も関連性の高いラベル:
Vulnerability::Vendor Base Container::Fix UnavailableVulnerability::Vendor Base Container::Will Not Be FixedVulnerability::Vendor Package::Fix UnavailableVulnerability::Vendor Package::Will Not Be Fixed
最終的に、問題のあるパッケージの修正が OS パッケージマネージャーに反映されると、gitlab-runner と deviation request 両方の Issue をクローズできます。
gitlab-runner の依存関係
ここで最もシンプルな対処方針は、依存関係を最新の互換バージョン(または少なくとも脆弱性に対処したバージョン)に更新することです。依存関係の更新を含む MR がマージされると、gitlab-runner の Issue をクローズできます。
依存関係が脆弱性に対処しない場合、考えられる対処方針は:
- 脆弱性に対処した依存関係のフォークが存在する場合、Go モジュールの
replaceディレクティブで使用します。この場合、アップストリームの依存関係で脆弱性が対処された際に元に戻すタスクを必ず作成してください。 - 可能であれば、その依存関係を使用しないか、別の同様の依存関係に置き換えることを検討します。
- deviation request Issueを作成します。
gitlab-runner のソースコード
ここでの唯一の対処方針は、脆弱なコードを修正することです。修正が単純でなく実装に時間がかかる場合(CVE の SLA を満たせない可能性がある場合)、deviation request Issueの作成が必要になる場合があります。
セキュリティフォークを使用した作業
Issue が機密扱いになっている場合、Issue を修正する MR はプロジェクトのセキュリティフォークで作成する必要があります(security-forksを参照)。一般的にプロセスは正規プロジェクトリポジトリでの MR 作成・マージと同じですが、いくつかの重要な相違点があります。
セキュリティリポジトリの MR は、Runner コードオーナーに加えて、セキュリティの対応者によるレビュー / 承認が必須であることに注意してください。
以下の例は GitLab Runner プロジェクトを対象としていますが、セキュリティフォークを持つすべての Runner 関連プロジェクトにも同様に適用されます。
セキュリティフォークを正規リポジトリと同期する
セキュリティフォークは正規リポジトリと自動的に同期するよう設定されていますが、セキュリティフォークの main ブランチに正規リポジトリの main ブランチに存在しない変更がある場合、無効になることがあります。これは通常、セキュリティ MR がセキュリティフォークの main にマージされたが、正規リポジトリの main にはマージされていない場合に発生します。この場合、セキュリティフォークを正規リポジトリと手動で同期させる必要があります。
チェックアウト済みの正規リポジトリから:
git fetch # 正規リポジトリの最新変更があることを確認します
git remote add security [email protected]:gitlab-org/security/gitlab-runner.git # セキュリティリポジトリをリモートとして追加します。git URL を使用してください
git fetch security # セキュリティフォークのリポジトリ参照をフェッチします
git checkout -b security-main security/main # セキュリティフォークの main ブランチをチェックアウトします
git rebase --rebase-merges origin/main # 正規の main をセキュリティの main にリベースします
git log --color --topo-order --oneline # 結果の履歴が正常であることを確認します
git push --force # 結果のローカル security main ブランチをセキュリティリモートリポジトリにプッシュします
注意:
- これらの手順では、セキュリティリポジトリと正規リポジトリを双方向に完全同期させません。正規リポジトリにのみ存在する変更をセキュリティリポジトリに取り込むだけです。逆方向の同期は以下で説明します。
- セキュリティリポジトリは
mainブランチに force-push ブランチ保護を持つべきではありませんが、作業中のものに保護がある場合は、最後のステップを実行できるように一時的に無効にしてください。 - セキュリティフォーク
mainブランチが正規リポジトリmainブランチと大幅に乖離した場合(特にセキュリティリポジトリのみに存在する変更について)、正規リポジトリをセキュリティフォークにリベースする際にマージの競合が発生する可能性があります。それらを解決する必要があります。
セキュリティ MR を正規リポジトリにマージバック
セキュリティリポジトリで作成された MR がマージされると(セキュリティリポジトリの main ブランチへ)、セキュリティリポジトリと正規リポジトリは非同期になります。セキュリティフォークから正規リポジトリへの MR のマージは手動プロセスです。開発者が正規リポジトリに取り込みたいセキュリティリポジトリの各 MR は、正規リポジトリへの新しい MR を通じて手動で行う必要があります。この手順が手動なのは、開発者がこれらのマージをいつ行うか制御できるようにするためです。
セキュリティフォークの main ブランチにすでにマージされた MR を正規リポジトリにマージするには、次の手順に従ってください:
チェックアウト済みの正規リポジトリから:
git fetch # 正規リポジトリの最新変更があることを確認します
git remote add security [email protected]:gitlab-org/security/gitlab-runner.git # セキュリティリポジトリをリモートとして追加します。git URL を使用してください
git fetch security # セキュリティフォークのリポジトリ参照をフェッチします
git checkout -b name-of-working-branch origin/main # セキュリティリポジトリからコミットをチェリーピックするための新しいブランチを作成します
git cherry-pick sha-of-commit-in-security-repo # セキュリティリポジトリから関連 MR のすべてのコミットをブランチにチェリーピックします
最後のステップを関連 MR のすべてのコミットについて、トポロジカル順に、マージコミットを除いて繰り返します。MR のマージコミットをチェリーピックされたコミットに含めないでください。
最後に、このブランチから通常どおり正規リポジトリに MR を作成します。
注意:
- セキュリティフォークが正規リポジトリと大幅に乖離した場合、コミットのチェリーピック時にマージの競合が発生する可能性があります。それらを解決する必要があります。
- MR が正規の main にマージされた直後に、上記のようにセキュリティリポジトリを手動で同期させる必要があります。
- これらの手順の目的は、セキュリティリポジトリと正規リポジトリを双方向に完全同期させることではありません。完全な同期は、セキュリティリポジトリからすべての MR を正規リポジトリにマージする副産物として発生します。各 MR についていつこれが行われるかは開発者の裁量に委ねられています。
メトリクスとログ
- ダッシュボード
- Runner サービス概要
- 追加のダッシュボードはトップバーのドロップダウンにあります:

- メトリクス
- ログ
- Runner ログ(シャードでフィルタリング)
- シャードのリストはサービスダッシュボードのトップバーのドロップダウンにあります:

内部ツール
マージリクエストボット
gitlab-org/gitlab-runner
には、マージリクエストボットが有効になっており、
コミュニティコントリビューションにコメントを投稿します。
これはマージリクエスト Webhook イベントを通じて設定されています。
Windows での開発 / テスト
Windows の開発ドキュメントでは Vagrant と Virtualbox の使用を推奨しています。 ただし、最も簡単な方法は Google Compute Engine の Windows インスタンスを作成して RDP 接続することです。 この特別なイメージからインスタンスを作成してください。
サポート対象バージョン
LTSCであるため、かなり古いバージョンの Windows をサポートしています。
サードパーティインフラ
IBM Z/OS でのテスト
s390x アーキテクチャのアーティファクトのテストを容易にするため、
GitLab チームメンバーが利用できる Z/OS VM があります。
ログイン
1Password の
Verifyボールトで、zOS login - gitlabkey02.pemファイルをダウンロードします。同じボールトの
zOS loginエントリから、userとaddressフィールドを確認します。Z/OS VM に SSH 接続します:
ssh -i "zOS login - gitlabkey02.pem" <user>@<address>注意: .pem ファイルのロック解除にパスワードが求められます。
zOS login - gitlabkey02.pemエントリに付属のパスワードを入力してください。
ヘルパーイメージのテスト
CI/CD パイプラインで生成された prebuilt-s390x.tar.xz イメージをテストしたい場合、かつ前の手順の .pem ファイルをすでに持っている場合、手順は次のとおりです:
prebuilt-s390x.tar.xzファイルを Z/OS VM にコピーします:scp -i "zOS login - gitlabkey02.pem" prebuilt-s390x.tar.xz <user>@<address>:/home/ubuntu/注意: .pem ファイルのロック解除にパスワードが求められます。
zOS login - gitlabkey02.pemエントリに付属のパスワードを入力してください。VM に SSH 接続します:
ssh -i "zOS login - gitlabkey02.pem" <user>@<address>イメージをインポートして実行します:
sudo docker import ./prebuilt-s390x.tar.xz gitlab/gitlab-runner-helper:s390x-dev sudo docker run -it gitlab/gitlab-runner-helper:s390x-dev bash gitlab-runner-helper help
Mac Runner AWS 環境へのアクセス
GitLab SaaS Mac Runners は AWS 上で稼働しています。 本番、ステージング、チームサンドボックス、個人サンドボックスの環境があります。 個人サンドボックスは [Hackystack(https://gitlabsandbox.cloud/cloud)] から作成できます。 コスト削減のために未使用リソースには注意してください。oh-my-cost が役立ちます。 Hackystack には チームサンドボックスもあり、Mac ジョブイメージビルダーインスタンスのホストに使用されています。 チームサンドボックスへのアクセスはアクセスリクエストで取得できます。 チームサンドボックス内には、ステージングと本番の Mac 環境にアクセスできるロールもあります。
Mac Runner ステージングへのアクセス
チームサンドボックスから、アカウント ID 251165465090(ステージング)の eng_dev_verify_runner というロールを有効化します。
Mac Runner 本番へのアクセス
チームサンドボックスから、アカウント ID 215928322474(本番)の eng_dev_verify_runner というロールを有効化します。
負荷テスト
グループ gitlab-runner-stress には GitLab と Runner インスタンスのストレステスト用ツール一式があります。
Mac Runners の標準ベンチマークは XcodeBenchmark(私たちのフォーク)です。
Runner ベンディングマシン(AWS Cloud Formation テンプレート)
Partner Solution グループは、AWS での Runner デプロイ用の厳選された AWS Cloud Formation テンプレートのコレクションを “Runner Vending Machine” として管理しています。 Runner の動作やデプロイ方法を変更する際はループに入れて、これらのテンプレートを最新の状態に保てるよう連絡してください。 担当者は DarwinJS です。
シークレット
Runner のシークレットをどのように管理し、適切な場所に格納するかについては詳細なドキュメントが必要です。 ドキュメント化が必要: https://gitlab.com/gitlab-org/gitlab-runner/-/issues/29823
