LoginSignup
8
2

More than 5 years have passed since last update.

GitLabでリリースMRを作成する「gitlab_mr_release」

Posted at

gitlab_mr_release

git flowで開発してる時にマージ済のMergeRequestからいい感じにリリース用のMergeRequestを作るためのgemです

GitHubだと git-pr-release があるのですが、GitLabだとそういうのがなかったので作りました

git-pr-release については下記を参照

使い方

設定ファイルを作る

まず gitlab_mr_release init で設定ファイルを作成します

$ gitlab_mr_release init
      create  .env.gitlab
      create  gitlab_mr_release.md.erb

リリースMergeRequestを作成

gitlab_mr_release create--source--target の間にあるアクセプトされたMergeRequestを元にリリース用のMergeRequestを作成します

$ gitlab_mr_release create --source=develop --target=master

20151115222734.png

設定ファイルについて

.env.gitlab

.env.gitlab では下記のような設定が使えます

.env.gitlab
GITLAB_API_ENDPOINT=http://example.com/api/v3
GITLAB_API_PRIVATE_TOKEN=XXXXXXXXXXXXXXXXXXX
GITLAB_PROJECT_NAME=group/name
TEMPLATE_FILE=gitlab_mr_release.md.erb
DEFAULT_TITLE=Release <%= Time.now %> <%= source_branch %> -> <%= target_branch %>
DEFAULT_SOURCE_BRANCH=develop
DEFAULT_TARGET_BRANCH=master
DEFAULT_LABELS=release

この設定ファイルはカレントディレクトリ( .env.gitlab )とhomeディレクトリ(~/.env.gitlab)の2ヶ所から読みこむことができるので、GITLAB_API_PRIVATE_TOKEN のようにリポジトリにコミットしたくないものは ~/.env.gitlab に設定しておくとよいです

~/.bash_profile あたりで

export GITLAB_API_PRIVATE_TOKEN=XXXXXXXXXXXXXXXXXXX

していてもたぶん大丈夫

gitlab_mr_release.md.erb

gitlab_mr_release.md.erb
# MergeRequests
<% merge_requests.each do |mr| %>
* [ ] !<%= mr.iid %> <%= mr.title %> @<%= mr.author.username %>
<% end %>

MergeRequestを作成する時のdescriptionのテンプレートです。erbなので each でループを回したりできます。

merge_requestsgitlab_mr_release create 実行時の --source--target の間にあるアクセプトされたMergeRequestの配列です。

mr で参照できる要素は下記参照。 https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/merge_requests.md#get-single-mr

引数の説明

gitlab_mr_release create に引数が渡されなかった場合、.env.gitlab~/.env.gitlab から読み込まれます。

優先順位は下記です。(上にあるほど優先度が高い)

  1. gitlab_mr_release create の引数
  2. カレントディレクトリの .env.gitlab
  3. ~/.env.gitlab
  • --source , DEFAULT_SOURCE_BRANCH (どちらか片方必須)
    • リリースMRのマージ元branch (例. develop)
  • --target , DEFAULT_TARGET_BRANCH (どちらか片方必須)
    • リリースMRのマージ先branch (例. master)
  • --title, DEFAULT_TITLE
    • MergeRequestのタイトル
    • DEFAULT_TITLE はerbで書けます。
    • 両方ない場合のデフォルトは 「Release :timestamp :source -> :target」
  • --labels , DEFAULT_LABELS
    • リリースMRのラベル
    • カンマ区切りで複数設定(例. label1,label2)

Tips

設定の使い分けの指針

自分がメンテしてるアプリだと GITLAB_API_PRIVATE_TOKEN だけ ~/.gitlab.env に置き、それ以外は .env.gitlab に置いてリポジトリにコミットしています。

設定ファイルをなるべくリポジトリにコミットしておくことで、gitlab_mr_release create を叩くことで誰が実行しても同じリリースMRが作られるようにしています。

gitlab_mr_releaseを導入したメリット

普段の開発でもMRのタイトルを分かりやすくするという動きができました。

普通にPRやMRを作るとデフォルトのタイトルがブランチ名から補完されますが、これだと後から見た時に分かりづらいです。

gitlab_mr_release を導入することで「MRのタイトルは後からリリースMR作った時のリリースノートになるので後から読んだ時に分かりやすいタイトルにして!」と言う理由もできました :sweat_smile:

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2