This page contains information related to upcoming products, features, and functionality.
It is important to note that the information presented is for informational purposes only.
Please do not rely on this information for purchasing or planning purposes.
As with all projects, the items mentioned on this page are subject to change or delay.
The development, release, and timing of any products, features, or functionality remain at the
sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
proposed
-
このドキュメントは作業中のものであり、セルズの設計のごく初期の状態を表しています。重要な点は文書化されていませんが、将来的には追加される予定です。これはCellsの可能性のあるアーキテクチャの一つであり、どのアプローチを実装するか決める前に、代替案と比較検討するつもりです。この文書化は、このアプローチを選ばなかった理由を文書化できるよう、これを実装しないと決めた場合でも残しておきます。
Cells:Git アクセス
このドキュメントでは、Cellsのアーキテクチャが全てのGitアクセス(HTTPSとSSH経由)に与える影響について説明します。
1.定義
Gitへのアクセスはアプリケーション全体で行われます。システムによるオペレーション(Git リポジトリの読み込み)、ユーザーによるオペレーション(Web IDE、git clone
、git push
を使ったコマンドラインからの新規ファイルの作成)があります。Cellsアーキテクチャでは、すべてのGitリポジトリはCellにローカルであると定義されているため、リポジトリを他のCellと共有することはできません。
Cellsアーキテクチャでは、Gitオペレーションはデータを保持しているCellでしか扱えないようにします。つまり、Web インターフェースや API、GraphQL 経由のオペレーションは正しい Cell にルーティングされる必要があります。つまり、git clone
またはgit push
のオペレーションは、Cell のコンテキスト内でのみ実行可能です。
2.データフロー
今日GitLabがGitリポジトリに対して行うオペレーションは様々です。これは、より良い影響を表すために、それらが今日どのように振る舞うのか、データフローを説明します。
Git へのアクセスは、プロジェクトにスコープされたいくつかのエンドポイントにのみ変更が必要なようです。リポジトリには様々なタイプがあるようです:
プロジェクト: グループに割り当てられたもの Wiki: プロジェクトに割り当てられた追加リポジトリ Design: Wikiと同様、プロジェクトに割り当てられた追加リポジトリ スニペット: リポジトリを保持する仮想プロジェクトを作成し、ユーザーに関連付けられます。 2.1.HTTPS での Git クローン
実行:git clone
over HTTPS
sequenceDiagram
User ->> Workhorse: GET /gitlab-org/gitlab.git/info/refs?service=git-upload-pack
Workhorse ->> Rails: GET /gitlab-org/gitlab.git/info/refs?service=git-upload-pack
Rails ->> Workhorse: 200 OK
Workhorse ->> Gitaly: RPC InfoRefsUploadPack
Gitaly ->> User: Response
User ->> Workhorse: POST /gitlab-org/gitlab.git/git-upload-pack
Workhorse ->> Gitaly: RPC PostUploadPackWithSidechannel
Gitaly ->> User: Response
2.2.SSH経由のGitクローン
実行:git clone
over SSH
sequenceDiagram
User ->> Git SSHD: ssh git@gitlab.com
Git SSHD ->> Rails: GET /api/v4/internal/authorized_keys
Rails ->> Git SSHD: 200 OK (list of accepted SSH keys)
Git SSHD ->> User: Accept SSH
User ->> Git SSHD: git clone over SSH
Git SSHD ->> Rails: POST /api/v4/internal/allowed?project=/gitlab-org/gitlab.git&service=git-upload-pack
Rails ->> Git SSHD: 200 OK
Git SSHD ->> Gitaly: RPC SSHUploadPackWithSidechannel
Gitaly ->> User: Response
2.3.HTTPS 経由での Git プッシュ
実行:git push
over HTTPS
sequenceDiagram
User ->> Workhorse: GET /gitlab-org/gitlab.git/info/refs?service=git-receive-pack
Workhorse ->> Rails: GET /gitlab-org/gitlab.git/info/refs?service=git-receive-pack
Rails ->> Workhorse: 200 OK
Workhorse ->> Gitaly: RPC PostReceivePack
Gitaly ->> Rails: POST /api/v4/internal/allowed?gl_repository=project-111&service=git-receive-pack
Gitaly ->> Rails: POST /api/v4/internal/pre_receive?gl_repository=project-111
Gitaly ->> Rails: POST /api/v4/internal/post_receive?gl_repository=project-111
Gitaly ->> User: Response
2.4.SSHD経由でのGitプッシュ
実行:git clone
over SSH
sequenceDiagram
User ->> Git SSHD: ssh git@gitlab.com
Git SSHD ->> Rails: GET /api/v4/internal/authorized_keys
Rails ->> Git SSHD: 200 OK (list of accepted SSH keys)
Git SSHD ->> User: Accept SSH
User ->> Git SSHD: git clone over SSH
Git SSHD ->> Rails: POST /api/v4/internal/allowed?project=/gitlab-org/gitlab.git&service=git-receive-pack
Rails ->> Git SSHD: 200 OK
Git SSHD ->> Gitaly: RPC ReceivePack
Gitaly ->> Rails: POST /api/v4/internal/allowed?gl_repository=project-111
Gitaly ->> Rails: POST /api/v4/internal/pre_receive?gl_repository=project-111
Gitaly ->> Rails: POST /api/v4/internal/post_receive?gl_repository=project-111
Gitaly ->> User: Response
2.5.ウェブ経由でのコミット作成
リポジトリへのAdd CHANGELOG
の実行:
sequenceDiagram
Web ->> Puma: POST /gitlab-org/gitlab/-/create/main
Puma ->> Gitaly: RPC TreeEntry
Gitaly ->> Rails: POST /api/v4/internal/allowed?gl_repository=project-111
Gitaly ->> Rails: POST /api/v4/internal/pre_receive?gl_repository=project-111
Gitaly ->> Rails: POST /api/v4/internal/post_receive?gl_repository=project-111
Gitaly ->> Puma: Response
Puma ->> Web: See CHANGELOG
3.提案
Cells ステートレス・ルーターの提案では、(ルーティング不可能な)あいまいなパスはすべてルーティング可能にする必要があります。つまり、ルーティング可能なエンティティ(プロジェクト、グループ、組織)を導入するためには、少なくとも以下のパスを更新する必要があります。
変更してください:
/api/v4/internal/allowed
=>/api/v4/internal/projects/<gl_repository>/allowed
/api/v4/internal/pre_receive
=>/api/v4/internal/projects/<gl_repository>/pre_receive
/api/v4/internal/post_receive
=>/api/v4/internal/projects/<gl_repository>/post_receive
/api/v4/internal/lfs_authenticate
=>/api/v4/internal/projects/<gl_repository>/lfs_authenticate
どこに:
gl_repository
can beproject-1111
(Gitlab::GlRepository
)
gl_repository
GitLab Shell (/gitlab-org/gitlab.git
) で実行されるリポジトリへのフルパスである場合もあります。 4.評価
セルが自分のリポジトリにしかアクセスできないのであれば、Git リポジトリのサポートは複雑ではありません。スニペットをサポートするのが一つ大きな複雑さですが、これはユーザーの個人名前空間をサポートするアプローチと同じカテゴリに入るでしょう。
4.1.長所
HTTPS/SSHとHooksをサポートするためのAPIはよく定義されており、簡単にルーティング可能です。 4.2.コンサ
リポジトリオブジェクトの共有は、指定されたCellとGitalyノードに限定されます。 異なるGitalyノードをまたぐクロスセルフォークをサポートすることはおそらく不可能です(Discover: How this works today across different Gitaly node)。