開発者はなぜCIランナー、レジストリ、テスト用データベースをノートパソコンから移行しているのか?

Eva Wong は テクニカルライター であり、 生粋の技術好き としてZimaSpaceで活動しています。ホームラボやオープンソースソフトウェア をこよなく愛する生粋のギークで、複雑な技術概念をわかりやすく、実践的なガイド にまとめることを得意としています。Evaは、セルフホスティングは難しいものではなく、楽しむものだと考えています。チュートリアルを通じて、初めてのNAS構築からDockerコンテナの使いこなしまで、コミュニティがハードウェアのセットアップをわかりやすく理解できるよう 支援しています。、初めてのNAS構築からDockerコンテナの習得まで。

チームがこれらのサービスをノートパソコンから移すのは、ビルドの再現性を高め、共有依存関係へのアクセスを確保し、テスト状態を破棄可能にし、開発者一人のバッテリーや作業環境に左右されないデリバリーを実現するためです。

サーバーは大きなノートパソコンではありません。CIランナーは信頼できないプロジェクトの指示を実行し、レジストリはサプライチェーンの成果物を保存し、テスト用データベースは変更可能な状態を保持します。これらを組み合わせれば小規模チームには効率的ですが、役割ごとにID、ネットワーク、ストレージ、シークレット、容量制限、復旧を分離することが前提です。

まずワークフローの問題から考える

ノートパソコンでホストするCIは、所有者が就寝する、移動する、ネットワークを切り替える、ふたを閉じる、ローカルのCPUやメモリを必要とするといった状況で停止します。ローカルレジストリはそのマシンとともに使えなくなり、テスト用データベースには、状態を把握している開発者が一人しかいないデータが蓄積していきます。

継続的インテグレーションには、誰もが確認できる、頻繁で自動化された検証が欠かせません。Martin Fowlerの継続的インテグレーションの実践では、自動セルフテストビルドと結果の可視化が重視されています。こうした特性を、時折しか使えないノートパソコンで保証するのは困難です。

キューの遅延、環境の不一致、イメージ配布、共有統合状態、またはノートパソコンのリソース競合など、解決する障害を明確にしてから役割を移します。

ランナーの信頼境界を分離する

CIジョブはコードを実行するものとして扱います。可能な場合はエフェメラルコンテナまたは仮想マシンを使い、信頼できないジョブにホストのDockerソケットをマウントするのを避け、リポジトリまたはパイプラインごとに権限を最小限に絞った認証情報を割り当てます。

ビルド用ワークスペースとキャッシュに容量制限を設定します。ジョブが失敗しても、サーバーのルートファイルシステムを満杯にしたり、プロジェクトに関係のないレジストリ認証情報を読み取ったりできないようにします。

信頼度と能力に基づいてランナーのラベルを定義します。身元不明のコントリビューターによるプルリクエストのコードを、本番環境のシークレットやホームネットワークにアクセスできるランナーで実行してはいけません。

レジストリに永続的な配布の役割を持たせる

認証、信頼できない経路でのTLS、保持ルール、ガベージコレクションの実行時間帯を設定し、レジストリのデータと構成を永続ストレージに保存します。変更不可のリリースタグと、破棄可能なブランチイメージを分けます。

設定、メタデータ、再構築できない成果物をバックアップします。イメージをソースから再現できる場合は、すべてのキャッシュ層をバックアップするのではなく、再構築にかかる時間を記録し、ソース、ビルド定義、外部依存関係を保管してください。

クリーンアップの前に容量を監視します。レジストリのガベージコレクションはI/O負荷が高く、実装によってはメンテナンス状態への切り替えが必要な場合があります。

使い捨て可能で本番を適切に反映するテスト用データベースを維持する

パイプラインまたはブランチごとに、専用のデータベース名、スキーマ、コンテナ、またはVMを用意します。バージョン管理されたフィクスチャまたは匿名化済みデータセットからシードし、マイグレーションを自動実行して、保持期間の終了後に削除します。

本番環境の秘密情報や、個人情報を未編集のままテスト用ロールにコピーしないでください。侵害されたジョブがテスト用データベースから無関係なサービスへ横展開できないよう、ネットワークへのアクセス範囲を制限します。

失敗したテストの診断に必要なログと成果物だけを保存します。長期間残り続ける正体不明のデータベースは、ノートPCで起きていた問題をより大きなマシンで再現することになります。

小規模チーム向けサーバートポロジーを構築する

ランナー、レジストリ、データベースの各役割に、個別のサービスアカウント、コンテナネットワーク、ボリューム、クォータ、バックアップルールを設定します。このNASとDockerのプラットフォームガイドでは、分離にコンテナと仮想マシンのどちらを使うべきかを判断できます。

管理インターフェースは制限されたネットワーク上に配置します。レジストリとCIのUIは、チームだけがアクセスできるようにするか、認証済みのアクセス層を介して公開します。各サービスの更新、所有者、ロールバック方法を記録してください。

ランナーの再作成、レジストリの復元または再構築、データベースの再シード、ディスク容量がいっぱいの状態、サーバーの再起動をテストします。共有サービスの復旧中も、開発者がローカルで作業できる状態を維持してください。

最終セットアップ確認

特定のノートPCがなくてもビルドを実行でき、バージョン管理された定義から環境を再作成でき、レジストリの成果物に保持と復旧の計画があり、テスト用データベースが分離され使い捨てにでき、各ランナーがジョブに必要な範囲を超える秘密情報を保持していない状態になれば、移行は成功です。

NASとサーバーのセットアップ

続きを読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.