GitLabへの新しいサービスコンポーネントの追加

GitLab製品は、互いに通信しながら独立したシステムプロセスとして動作するいくつかのサービスコンポーネントで構成されています。これらのサービスは同じインスタンス上で実行することも、異なるインスタンスにまたがって実行することもできます。既存のコンポーネントのリストはGitLabアーキテクチャの概要にあります。

インテグレーションフェーズ

以下のアウトラインは、コンポーネントをインテグレーションするさまざまなフェーズの例として、成熟度のメトリクス名を再利用しています。これらのフェーズは、コンポーネントの実際の成熟度と緩やかに結合しているだけであり、実装順序のガイドとして意図されています。例えば、Lovableであるためにコンポーネントがデフォルトで有効である必要はありません。デフォルトで有効だからといって、それだけでコンポーネントがLovableになるわけではありません。

新しいコンポーネントの提案

新しいコンポーネントを GitLab にインテグレーションするための最初のステップは、イシュー・トラッカーで機能提案を作成することから始まります。

コンポーネントが該当する製品カテゴリを特定し、そのカテゴリを担当するエンジニアリングマネージャーとプロダクトマネージャーを割り当てます。

GitLabの機能を提案からリリースまで持っていくための一般的なステップは、プロダクト開発フローにあります。

新しいサービスとGitLabのインテグレーション

新しいサービスの追加は、他の貢献と同じマージリクエストワークフローに従い、同じ完了基準を満たさなければなりません。さらに、以下をカバーする必要があります:

GitLabから完全に分離してオペレーションできるサービスの場合:

最初の反復は、外部インストールされたコンポーネントとしてサービスに接続して使用する機能を追加することです。多くの場合、これはGitLabでサービスに接続する、あるいはサービスからの接続を許可する設定を提供することを含みます。そして、GitLabでどのようにサービスをインストールして設定するかについてのドキュメントを発送します。

Elasticsearchは、この方法でインテグレーションされたサービスの一例です。Gitalyのような内部プロジェクトを含む他の多くのサービスは、最初は別個にインストールされた代替サービスとして始まりました。

既存のGitLabコードベースに依存しているサービスについては、こちらをご覧ください:

最初のイテレーションは、gitlab.yml の設定か機能フラグによってオプトインする必要があります。このようなタイプのサービスでは、最初のインテグレーションとしてサービスとその依存関係をGitLabにバンドルすることがしばしば必要です。

note
ActionCableは、この方法で追加されたサービスの例です。

GitLab とサービスのバンドル

GitLabで出荷されるコードは、法務チームによって承認されたライセンスを使用する必要があります。既存の承認者ライセンスのリストをご覧ください。

コンパイルが必要な新しい依存関係を追加するときは、ディストリビューションチームに通知してください。サポートされるすべてのプラットフォームで依存関係をコンパイルできなければなりません。

GitLabにバンドルされる新しいサービスは、以下の環境で利用できる必要があります。

開発者環境

新しいサービスをバンドルする最初のステップは、コラボレーションとフィードバックを行うために開発環境に提供することです。

標準的なインストール方法

エンドユーザーやGitLab.com向けにサービスをバンドルするためには、標準のインストール方法に含める必要があります:

サービスの依存関係の処理

依存関係は常に最新の状態に保ち、セキュリティアップデートを追跡する必要があります。Railsのコードベースでは、JavaScriptとRubyの依存関係はGitLabの依存関係スキャンを使って脆弱性をスキャンしています。

さらに、Omnibus パッケージや Cloud Native イメージで使用されているシステム依存関係は、依存関係更新の自動化に追加する必要があります。

リリース管理

サービスコンポーネントを毎月のGitLabリリースで更新またはリリースする必要がある場合、リリースツールの自動化に追加する必要があります。このプロジェクトはデリバリーグループによってメンテナーされています。

GitLabの月次リリースにコンポーネントを含めるために、異なるレベルの自動化が利用可能です。これらの異なるレベルでコンポーネントをリリースに含めるための要件とプロセスは、リリースドキュメントに詳しく書かれています。

リリースツールによって管理されているリリースのプロジェクトのリストは、release tools project directoryにあります。

例えば、Gitaly、GitLab Workhorse、GitLab Shellの希望するバージョンは様々なリリースパイプラインを通して同期する必要があります。