チャプター ▾ 第2版

4.8 サーバー上のGit - GitLab

GitLab

GitWebは非常にシンプルです。もしモダンでフル機能のGitサーバーを探しているのであれば、代わりにインストールできるオープンソースソリューションがいくつかあります。GitLabはその人気のあるものの一つなので、ここでは例としてそのインストールと使用について説明します。これはGitWebのオプションよりも難しく、より多くのメンテナンスが必要ですが、フル機能のオプションです。

インストール

GitLabはデータベースをバックエンドとするWebアプリケーションであるため、他のGitサーバーと比較してインストールが複雑です。幸いなことに、このプロセスは十分に文書化されており、サポートも充実しています。GitLabは、公式のOmnibus GitLabパッケージを使用してサーバーにGitLabをインストールすることを強く推奨しています。

その他のインストールオプションは以下の通りです。

  • Kubernetesで使用するGitLab Helmチャート。

  • Dockerで使用するDockerized GitLabパッケージ。

  • ソースファイルから。

  • AWS、Google Cloud Platform、Azure、OpenShift、Digital Oceanなどのクラウドプロバイダー。

詳細については、GitLab Community Edition (CE) readmeをお読みください。

管理

GitLabの管理インターフェースはウェブ経由でアクセスします。ブラウザでGitLabがインストールされているホスト名またはIPアドレスを指定し、`root`ユーザーとしてログインするだけです。パスワードはインストールタイプによって異なりますが、デフォルトでは、Omnibus GitLabは自動的にパスワードを生成し、少なくとも24時間`/etc/gitlab/initial_root_password`に保存します。詳細についてはドキュメントを参照してください。ログイン後、右上メニューの「Admin area」アイコンをクリックしてください。

The “Admin area” item in the GitLab menu
図50. GitLabメニューの「Admin area」項目

ユーザー

GitLabサーバーを使用するすべてのユーザーは、ユーザーアカウントを持つ必要があります。ユーザーアカウントは非常にシンプルで、主にログインデータに紐付けられた個人情報を含みます。各ユーザーアカウントには、そのユーザーに属するプロジェクトの論理的なグループであるネームスペースがあります。もしユーザー「jane」が「project」という名前のプロジェクトを持っていた場合、そのプロジェクトのURLはhttp://server/jane/projectとなります。

The GitLab user administration screen
図51. GitLabユーザー管理画面

ユーザーアカウントは2つの方法で削除できます。「ブロック」すると、ユーザーはGitLabインスタンスにログインできなくなりますが、そのユーザーのネームスペース下のすべてのデータは保持され、そのユーザーのメールアドレスで署名されたコミットは引き続きそのプロファイルにリンクされます。

一方、「破棄」すると、データベースとファイルシステムから完全に削除されます。そのネームスペース内のすべてのプロジェクトとデータは削除され、そのユーザーが所有するグループもすべて削除されます。これは明らかに、より永続的で破壊的な操作であり、めったに必要となることはないでしょう。

グループ

GitLabグループは、プロジェクトの集合体であり、ユーザーがそれらのプロジェクトにアクセスする方法に関するデータも含まれます。各グループはプロジェクトネームスペースを持ち(ユーザーの場合と同じように)、例えばグループ「training」がプロジェクト「materials」を持っている場合、そのURLはhttp://server/training/materialsとなります。

The GitLab group administration screen
図52. GitLabグループ管理画面

各グループは複数のユーザーと関連付けられており、それぞれのユーザーはグループのプロジェクトおよびグループ自体に対するアクセス許可レベルを持っています。これには「ゲスト」(課題とチャットのみ)から「オーナー」(グループ、メンバー、プロジェクトの完全な制御)までが含まれます。権限の種類は多すぎてここには列挙できませんが、GitLabの管理画面には役立つリンクがあります。

プロジェクト

GitLabのプロジェクトは、おおよそ単一のGitリポジトリに対応します。すべてのプロジェクトは、ユーザーまたはグループのいずれか単一のネームスペースに属します。プロジェクトがユーザーに属する場合、プロジェクトのオーナーは、誰がプロジェクトにアクセスできるかを直接制御します。プロジェクトがグループに属する場合、グループのユーザーレベルの権限が適用されます。

各プロジェクトには可視性レベルがあり、そのプロジェクトのページとリポジトリへの読み取りアクセス権を制御します。プロジェクトがPrivateの場合、プロジェクトのオーナーは特定のユーザーに明示的にアクセス権を付与する必要があります。Internalプロジェクトは、ログインしているすべてのユーザーに表示され、Publicプロジェクトは誰でも表示できます。これは、git fetchアクセスと、そのプロジェクトのWeb UIへのアクセスの両方を制御することに注意してください。

フック

GitLabは、プロジェクトレベルとシステムレベルの両方でフックをサポートしています。どちらの場合も、関連するイベントが発生すると、GitLabサーバーは記述的なJSONを含むHTTP POSTを実行します。これは、CIサーバー、チャットルーム、デプロイツールなど、GitリポジトリとGitLabインスタンスを開発自動化の残りの部分に接続する優れた方法です。

基本的な使い方

GitLabで最初に行いたいことは、新しいプロジェクトを作成することです。ツールバーの「+」アイコンをクリックしてこれを行うことができます。プロジェクトの名前、それが属すべきネームスペース、そしてその可視性レベルを尋ねられます。ここで指定することのほとんどは永続的なものではなく、後で設定インターフェースから変更できます。「プロジェクトを作成」をクリックすると、完了です。

プロジェクトが存在したら、それをローカルのGitリポジトリに接続したくなるでしょう。各プロジェクトはHTTPSまたはSSH経由でアクセスでき、どちらもGitリモートを設定するために使用できます。URLはプロジェクトのホームページの上部に表示されています。既存のローカルリポジトリの場合、次のコマンドでホストされた場所にgitlabという名前のリモートが作成されます。

$ git remote add gitlab https://server/namespace/project.git

リポジトリのローカルコピーがない場合は、単にこれを行うことができます。

$ git clone https://server/namespace/project.git

ウェブUIは、リポジトリ自体のいくつかの便利なビューへのアクセスを提供します。各プロジェクトのホームページには最近のアクティビティが表示され、上部のリンクからプロジェクトのファイルとコミットログのビューに移動できます。

共同作業

GitLabプロジェクトで共同作業を行う最も簡単な方法は、各ユーザーにGitリポジトリへの直接プッシュアクセスを付与することです。ユーザーをプロジェクトに追加するには、そのプロジェクトの設定の「メンバー」セクションに移動し、新しいユーザーをアクセスレベルに関連付けます(異なるアクセスレベルについてはグループで少し説明されています)。ユーザーに「開発者」以上のアクセスレベルを付与すると、そのユーザーはコミットとブランチをリポジトリに直接プッシュできます。

もう一つの、より疎結合なコラボレーションの方法は、マージリクエストを使用することです。この機能により、プロジェクトを見ることができるすべてのユーザーが、制御された方法でプロジェクトに貢献できます。直接アクセス権を持つユーザーは、単純にブランチを作成し、そこにコミットをプッシュし、自分のブランチから`master`または他のブランチへのマージリクエストを開くことができます。リポジトリへのプッシュ権限を持たないユーザーは、それを「フォーク」して自分のコピーを作成し、自分のコピーにコミットをプッシュし、自分のフォークからメインプロジェクトへのマージリクエストを開くことができます。このモデルにより、オーナーはリポジトリに何がいつ投入されるかを完全に制御しつつ、信頼できないユーザーからの貢献も受け入れることができます。

マージリクエストとイシューは、GitLabにおける長期的な議論の主要な単位です。各マージリクエストでは、提案された変更について行ごとに議論することができ(軽量なコードレビューのようなものをサポートします)、一般的な全体的な議論のスレッドも提供されます。どちらもユーザーに割り当てたり、マイルストーンに整理したりできます。

このセクションは主にGitLabのGit関連機能に焦点を当てていますが、成熟したプロジェクトとして、プロジェクトwikiやシステムメンテナンスツールなど、チームの共同作業を支援する多くの他の機能を提供しています。GitLabの利点の1つは、サーバーがセットアップされ稼働していれば、設定ファイルを微調整したりSSH経由でサーバーにアクセスしたりする必要がめったにないことです。ほとんどの管理と一般的な使用は、ブラウザ内のインターフェースを介して行うことができます。

scroll-to-top