はじめに
最近弊社のGitリポジトリをBacklogからGitLabに移行することがありました
その時にマージリクエスト周りで整えてよかった2点の共有です
モチベーションとしては、マージリクエストを送った際になるべく追加でやり取りを発生させたくない!というもの
やったこと
- マージリクエストのテンプレートの作成
- マージリクエスト内容をSlackに通知
マージリクエストのテンプレートの作成
これは、Qiitaに上がっているほかの方のものを参考にしました。
ユル~く使うGitLab(ギットラボ)<Issue,MRテンプレート化計画編>
- ルートディレクトリに
.gitlab
というディレクトリを作成 - その中に
merge_request_templates
というディレクトリを作成 - その中に
MRテンプレート.md
を作成
## 概要
{課題番号}-ISSUE_NAME //issueとの紐づけ
### 開発内容
- 内容を書く
### 見てほしい箇所
- 特に見てほしい箇所を書く
### その他
その他必要なメッセージを書く
こんな風にテンプレートから選択することができる。
マージリクエスト内容をSlackに通知
本来、GitLab>設定>インテグレーション>Slack notificationsというSlack用の通知が用意されている。
しかし、担当者へのメンションをつけたかったので、web hookでcloud functionsを呼び出し、そこからslackに飛ばすようにした。
import slackweb
import os
def index(request):
"""Responds to any HTTP request.
Args:
request (flask.Request): HTTP request object.
Returns:
The response text or any set of values that can be turned into a
Response object using
`make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`.
"""
request_json = request.get_json()
title = request_json['object_attributes']['title']
user = request_json['user']['username']
mention = return_mention(request_json['object_attributes']['assignee_id'])
project_name = request_json['project']['name']
branch = '{} => {}'.format(request_json['object_attributes']['source_branch'], request_json['object_attributes']['target_branch'])
url = request_json['object_attributes']['url']
repository = request_json['repository']['name']
description = request_json['object_attributes']['description']
author = return_mention(request_json['object_attributes']['author_id'])
if request_json['object_kind'] != 'merge_request' or request_json['event_type'] != 'merge_request':
return f'close'
# マージリクエスト申請時
if request_json['object_attributes']['merge_status'] == 'unchecked':
message = 'マージリクエストが送られました\n'
message = message + '\nプロジェクト名:' + project_name
message = message + '\nリポジトリ名:' + repository
message = message + '\nタイトル:' + title
message = message + '\nユーザー:' + user
message = message + '\nブランチ:' + branch
message = message + '\n担当者:' + mention
message = message + '\nurl:' + url
message = message + '\n\nメッセージ:\n' + description
# マージリクエスト承認時
if request_json['object_attributes']['merge_status'] == 'can_be_merged':
message = author + '\n\nリクエストがマージされました\n'
message = message + '\nプロジェクト名:' + project_name
message = message + '\nリポジトリ名:' + repository
message = message + '\nタイトル:' + title
message = message + '\nブランチ:' + branch
message = message + '\nurl:' + url
slack = slackweb.Slack(url=os.environ["SLACK_URL"])
slack.notify(text=message)
return f'success'
# ここは各自のslack user idとGitLabのuser idを紐づける
def return_mention(id):
if id == 0000000:
return '<@mention>'
if id == 1111111:
return '<@mention>'
if id == 2222222:
return '<@mention>'
if id == 3333333:
return '<@mention>'
return 'なし'
こんな感じでサクッと実装。
プライベートなところは隠してますが、__担当者__のところは@でメンションが入っています。
どうなったか
MRのテンプレートを作って必要事項を記入
↓
そのメッセージとともに担当者に通知
というをGitLab上ですませることができたため、
Aさん 「Bさん、○○の件でマージリクエスト送ったので見ておいて下さい」
Bさん 「承知です!」
Aさん 「あ、ここを重点的に見てほしくて、まだマージもしないでください!」
Bさん 「(早くいってよ。。。)」
みたいなことを減らすことができたかなあと思います。
無駄なやり取りも減って、みんなが把握しやすくなってハッピーになりました。