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

エヴァ・ウォン は テクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

チームは、ビルドを再現可能にし、共有依存関係にアクセスできるようにし、テスト状態を使い捨てにし、1人の開発者のバッテリーや作業環境に左右されずに配信できるようにするため、これらのサービスをノートパソコンから移行します。

サーバーは大きなノートパソコンではありません。CIランナーは信頼できないプロジェクト命令を実行し、レジストリはソフトウェアサプライチェーンのアーティファクトを保存し、テストデータベースは変更可能な状態を保持します。これらを統合することで小規模チームにとって効率的になるのは、ID、ネットワーク、ストレージ、シークレット、クォータ、復旧を役割ごとに分離している場合に限られます。

ワークフローの障害から始める

ノートパソコン上のCIは、所有者が寝ている、移動している、ネットワークを変更する、ふたを閉じる、またはローカルのCPUやメモリが必要になると停止します。ローカルレジストリはそのマシンとともに利用できなくなり、テストデータベースには1人の開発者しか理解していない状態が蓄積されます。

継続的インテグレーションは、全員が確認できる頻繁で自動化された検証に依存します。Martin Fowlerの継続的インテグレーションの実践では、自動セルフテストビルドと結果の可視化が重視されています。これらは、常時利用できるとは限らないノートパソコン上では保証が困難です。

役割を移行するのは、それによって解決する問題が、キューの遅延、環境の差異、イメージの配布、共有インテグレーション状態、ノートパソコンのリソース競合のどれなのかを明確にしてからにしましょう。

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

CIジョブはコード実行として扱います。可能な場合は一時的なコンテナまたは仮想マシンを使用し、信頼できないジョブにホストのDockerソケットをマウントすることを避け、リポジトリまたはパイプラインごとに範囲を限定した認証情報を割り当てます。

ビルド用ワークスペースとキャッシュにはクォータを設定します。失敗したジョブによってサーバーのルートファイルシステムがいっぱいになったり、プロジェクトに関係のないレジストリ認証情報が読み取られたりしてはなりません。

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

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

レジストリのデータと設定は、認証、信頼できない経路でのTLS、保持ルール、ガベージコレクションの実行時間帯を備えた永続ストレージに保存します。不変のリリースタグと、使い捨てのブランチイメージを分離します。

設定、メタデータ、再構築できないアーティファクトをバックアップします。イメージをソースから再現可能な場合は、すべてのキャッシュレイヤーをバックアップするのではなく、再構築にかかる時間を文書化し、ソース、ビルド定義、外部依存関係を保持します。

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

テストデータベースは使い捨てにしつつ、実際の環境を反映させる

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

本番環境のシークレットや、マスキングされていない個人データをテスト用途にコピーしてはいけません。侵害されたジョブがテストデータベースから無関係なサービスへ横展開できないよう、ネットワーク到達範囲を制限します。

失敗したテストの診断に必要なログとアーティファクトだけを永続化します。長期間残る正体不明のデータベースは、より大きなマシン上でノートパソコンの問題を再現するだけです。

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

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

管理インターフェースは制限されたネットワークに配置します。レジストリとCI UIはチーム内からのみ、または認証済みのアクセス層を経由した場合にのみ公開します。すべてのサービスについて、更新、所有者、ロールバックを記録します。

ランナーの再作成、レジストリの復元または再構築、データベースの再シード、ディスク容量が完全に不足した状態、サーバーの再起動をテストします。共有サービスの復旧中も、開発者がローカルで作業を続けられるようにします。

最終セットアップ確認

特定のノートパソコンがなくてもビルドを実行でき、バージョン管理された定義から環境を再作成でき、レジストリアーティファクトに保持と復旧の計画があり、テストデータベースが分離され使い捨てになっており、どのランナーもジョブに必要な範囲を超えるシークレットを保持していないなら、移行は成功です。

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.