階層をまたいだブループリントの整理
| ブループリント階層 | 利用するタイミング | 使用例 |
|---|---|---|
| Enterprise | 共有設定全般のデフォルト | Python 3.12, Node 20, Go 1.22, Rust, セキュリティスキャナー, 社内 CA 証明書, 社内 CLI, プロキシ設定, 共有レジストリトークン |
| Organization | 何かをすべての組織に適用すべきではない場合にのみ利用する | チーム専用の非公開レジストリ, 特定のチームに制限されたツール, 組織固有の lint 設定 |
| Repository | リポジトリディレクトリで実行される、リポジトリごとのセットアップ | npm install, uv sync, プロジェクト固有の Knowledge アイテム, リポジトリレベルの .envrc ファイル |
適切な階層でKnowledge アイテムを利用する
- Enterprise knowledge: 全社共通のコーディング規約、セキュリティレビューの要件、社内ドキュメントへのリンク。
- Org knowledge: チームの慣習、共有ライブラリの利用方法、チーム固有のデプロイ手順。
- Repo knowledge: 特定のプロジェクトの lint、test、build コマンド。
大規模環境でのシークレット管理
シークレットを定義する場所
| Secret scope | Use for | 使用例 |
|---|---|---|
| Enterprise | すべての組織で共有する認証情報 | 社内レジストリのトークン、社内プロキシの認証、社内サービス向けの共通APIキー |
| Organization | チーム固有の認証情報 | チームのデプロイキー、チームのサービス向けAPIトークン、チーム固有のレジストリ認証 |
| Repository | リポジトリ固有の認証情報 | プロジェクトごとのAPIキー、プロジェクト固有のサービスアカウント |
シークレットの衛生管理
- シークレットを YAML に絶対に含めないでください。 必ずシークレット管理 UI を利用してください。YAML に記載したシークレットは、ログ、ビルド成果物、監査証跡に残ってしまいます。
- シークレットは定期的にローテーションしてください。 UI でシークレットをローテーションすると、新しい値は次回のビルドから有効になります。ブループリント を変更する必要はありません。
- わかりやすい名前を付けてください。
INTERNAL_NPM_TOKENはTOKEN_1より適切です。ほかの管理者 (や将来の自身) が、各シークレットの用途を理解できるようにする必要があります。 - シークレットの利用状況を監査してください。 定期的に、どのシークレットが存在するか、今も必要かどうかを確認してください。使われていないシークレットは削除し、攻撃対象領域を減らしましょう。
org シークレットと Enterprise シークレットの名前が同じ場合は、org シークレットが優先されます。repo シークレットが org シークレットを上書きする場合も同様です。これは意図して利用してください。たとえば、org では
Enterprise のレジストリトークンを、異なる権限を持つチーム専用のトークンで上書きすることがあります。
ビルドの健全性の監視
レビューの実施頻度を決める
- 失敗したビルド: Enterprise または組織のブループリントで発生した重大な失敗。すべてのリポジトリをブロックします。
- 部分的なビルド: 一部のリポジトリのみが失敗している状態。多くの場合、依存関係の問題や古いブループリントの兆候です。
- 古いビルド: 最新のビルドが異常に古い組織。ビルドキューが滞留している可能性があります。
Enterprise ブループリント の障害に対処する
- 影響範囲を把握します。 Rollout ページで、影響を受けている org の数を確認します。
- Enterprise ブループリント を元に戻します。 直近で正常に動作していた ブループリント に戻し、すぐに保存してください。これにより、影響を受けたすべての org で再ビルドがトリガーされます。
- 切り分けて調査します。 変更を再度ロールアウトする前に、単一のパイロット org でテストします。
部分的なビルドは兆候です
- repo 固有の依存関係の問題 (壊れたロックファイル、削除されたパッケージ)
- 特定のプロジェクトでのみ必要なシステムライブラリの不足
- repo の変更に合わせて更新されていない古いブループリント
ビルドをピン留めするべき場合
固定するのが適切なケース
- 重要なリリース作業の進行中。 リリース対応中の今後48時間は、安定していて正常に動作することが確認済みの環境が必要です。
- アクティブなデバッグ。 ビルドの問題を調査しており、自動更新で状況が変わってしまうのを避けたい場合です。
- ロールバック。 新しいビルドでリグレッションが発生し、blueprintを修正している間、すぐに元に戻す必要がある場合です。
ピン留めすべきでない理由
- 対処を避けるため。 ビルドが壊れている場合は、ブループリントを修正してください。ピン留めは問題を見えなくするだけで、しかもピンは自動で期限切れにならないため、うっかり忘れると古い環境をいつまでも使い続けることになります。
- 「念のため」。 自動更新により依存関係は常に最新の状態に保たれ、問題も早い段階で見つかります。明確な理由もなくこれを無効にすると、問題を先送りにするだけです。
Enterprise の移行
一般的なアーキテクチャパターン
モノレポ構成の組織
npm install、バックエンド ディレクトリでの uv sync) は repo ブループリント に記述します。org ブループリント が必要なのは、この組織に他の組織には適用すべきでないツールや設定がある場合だけです。
複数リポジトリの組織
maintenance と knowledge だけを含む専用の ブループリント を用意します。これにより、リポジトリ間でセットアップコマンドを重複して記述せずに済みます。
セットアップ: 他のチームが利用する共有サービスを提供する、プラットフォームまたは DevOps の org。
アプローチ: enterprise ブループリント で共通の基盤をカバーします。共有インフラ org の ブループリント には、その repo で必要なプラットフォーム固有のツール (Terraform、kubectl、クラウド CLI) がインストールされます。他の org にはこれらのツールは含まれません。適用されるのは、enterprise ブループリント の内容に加えて各 org 固有の設定のみです。
独立したプロジェクト組織
判断に迷う場合は、Enterprise ブループリント に含めてください。組織ごとに何かを除外する明確な理由 (ツールのバージョン競合、アクセス制限など) がある場合は、組織レベルで上書きできます。多くの組織の ブループリント ごとにセットアップを重複させるより、包括的な Enterprise のベースラインを用意するほうが簡単です。
