社内では去年までSVNで管理しておりGitを利用するには外のサービスを利用していました。
これじゃダメだと思い今年の春頃からGitLabを導入して運用しています。
導入する際のあれこれの決め事が面倒だったりトライアンドエラーを繰り返して何とか問題なく運用できるところまで来ました。
GitLabをこれから導入する人に役に立てばと思います。
はじめに
やりたいこと
- システム管理者の負荷を軽減するため、リポジトリ作成はシステム管理者ではなくPJ案件管理者(PM)に作成してもらいたい。
- リポジトリの削除は基本禁止。
- GitHubフローで管理したい。
Groupについて
GitLabにはリポジトリをグルーピングすることができます。
グループを案件(PJ)単位で作成し、案件で開発する・保守するシステムをリポジトリで管理します。
権限について
上記のやりたいことを満たすため、下記のように権限を付与します。
担当者 | Group権限 | Group配下のリポジトリ(Project)権限 |
---|---|---|
システム管理者 | Owner | Group権限引継 (Owner) |
PJ案件管理者(PM) | Master | Group権限引継 (Master) |
開発リーダー・コードレビュア | 所属しない | Master |
開発者(PG) | 所属しない | Developer |
メンバー登録運用フローについて
権限の詳細についてはこちらを参照すると良いと思います。
http://qiita.com/mats116/items/f11e2e25731c325eeda8
GitHubフローについて
下記のように運用しています。
ブランチ | プロテクト有無 | ブランチ作成元 | 概要 |
---|---|---|---|
master | あり | - | 常に本番環境・UAT環境にリリースできる状態 |
develop | あり | master | 常に社内共通テスト環境にリリースできる状態 |
作業ブランチ | なし | develop | 開発用ブランチ |
masterブランチ
- 常に本番環境・UAT環境にリリースできる状態。
- developブランチからマージする際にはMaster権限のユーザがWeb上でマージリクエストを行い自身でAcceptもしくは別のMaster権限持っているユーザにAcceptしてもらう。
- 本番リリース時にはいつリリースしたものかを記すためmasterブランチにタグを付ける。
developブランチ
- 常に社内共通テスト環境にリリースできる状態。
- リポジトリ作成時にmasterブランチと同時に作成。
- 作業ブランチからdevelopブランチにマージする際はWeb上でマージリクエストを行う。
- AcceptするMaster権限持っているユーザは必ずレビューしてからAcceptを行う。
作業ブランチ
- 開発用ブランチ。
- 開発するためのブランチで開発者が自らdevelopからブランチを作成する。
- developブランチにマージする際はWeb上でマージリクエストを行う。
GitHubフローの詳細についてはこちらを参照すると良いと思います。
http://qiita.com/tbpgr/items/4ff76ef35c4ff0ec8314
各担当者ができること(最終形)
上記の内容から各担当者ができることを表にまとめてみた。
タスク | システム管理者 | PJ管理者 | 開発リーダー | 開発者 | 備考 |
---|---|---|---|---|---|
ユーザーの作成(GitLab) | ○ | × | × | × | |
ユーザーの削除(GitLab) | ○ | × | × | × | |
グループの作成 | ○ | × | × | × | |
グループの編集 | ○ | ○ | × | × | |
グループの削除 | ○ | × | × | × | |
所属グループへユーザーの権限付与&追加 | ○ | △ | × | × | システム管理者がPJ管理者をグループにMasterとして追加。その後、PJ管理者も所属グループへユーザーの権限付与&追加可能となるが、運用ではPJ管理者交代の際を除いて基本禁止している。 |
所属グループからユーザーの削除 | ○ | △ | × | × | システム管理者がPJ管理者をグループにMasterとして追加。その後、PJ管理者も所属グループへユーザーの削除可能となるが、運用ではPJ管理者交代の際を除いて基本禁止している。 |
所属グループ内のリポジトリの作成 | ○ | ○ | × | × | |
所属グループ内のリポジトリへユーザーの権限付与&追加 | ○ | ○ | ○ | × | PJ管理者が開発リーダーをMasterとして追加。その後、開発リーダーもユーザーの権限付与&追加が可能となる。 |
所属リポジトリからユーザー削除 | ○ | ○ | ○ | × | |
所属リポジトリの編集 | ○ | ○ | ○ | × | |
所属リポジトリの削除 | ○ | × | × | × | |
プロテクトブランチ(master/develop)へのマージ | ○ | ○ | ○ | × |
具体的な作業手順
■システム管理者がやること
(1) ユーザ作成
ユーザ作成手順は特に注意することもないので割愛します。
(2) Group作成
-
[Group path]にグループ名を入力
(3) GroupにPJ案件管理者の追加
- [Add user(s) to the group](画面右)の[Search for a user]でPJ案件管理者のユーザを選択
- 権限は[Master]を選択
- [Add users to group]をクリック
■PJ案件管理者(PM)がやること
(1) リポジトリ作成
-
[Groups]を選択(左メニュー)
-
[Projects path]でグループを選択、プロジェクト名を入力する
-
[Visibility Level]は[private]を選択
(2) masterブランチ作成(README.mdの追加)
(3) developブランチの作成
-
[Projects]を選択(左メニュー)
-
[Branch name]は[develop]、[Create from]は[master]を選択
(4) デフォルトブランチの変更
-
[Projects]を選択(左メニュー)
(5) ブランチの保護
-
[Projects]を選択(左メニュー)
-
[Protected branches]を選択(左メニュー)
-
[Protect]をクリックし[develop]ブランチを保護する。これにより、権限が[Developer]のユーザはdevelopにpushできなくなる
※チェックボックスにチェックを入れるだけでDeveloper権限がプッシュできるように自動更新されるので注意!!
(6) リポジトリへのメンバーの追加(その1)
-
[Projects]を選択(左メニュー)
-
[People]で対象のメンバーおよび[Project Access]で権限を選択
(7) リポジトリへのメンバーの追加(その2)
Projectごとにメンバー追加をするのは面倒なので、1度Projectにメンバーを追加したらメンバーはimportするのが楽
-
[Project]でメンバーimport元のプロジェクトを選択
(8)その他
Slack連携やRedmine連携等のServiceもリポジトリ毎の設定になるので連携したい場合は設定してください。
さいごに
上記は一例なので各企業や組織によって上手いことやってください。
では、素敵なGitLabライフを送ってください。
以上です。