backlogの課題からその課題によってどのようなコード修正が行われたのかスムーズに知りたい!
と思った。
成果物
https://github.com/mYahagi/postBacklog
(Lambdaではデフォルトで使えないモジュールも含まれているので↓を参考にしてよしなに)
実現方法
- BacklogのAPIKeyを発行する
- lambdaにbacklogのAPIを叩くスクリプトを記述する
- AWSのAPIGatewayにPOSTの受け口を作る
- GitHubの該当リポジトリにAPIGatewayに対して通知を送るWebhookを設定する
1. BacklogのAPIKeyを発行する
右上の自分のアイコンから個人設定 > API と遷移してAPIKeyを発行する
2. lambdaにbacklogのAPIを叩くスクリプトを記述する
今回使用していいるbacklogAPIの仕様はこちらを参照
APIKeyはくれぐれも公開されないように
→今回はlambda側の環境変数に定義しているよ
また、lambdaでのpip installが必要なモジュールの使用の仕方はこちらを参考にしました
import requests
import os
import re
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
pattern = r'xxxx_xx-[0-9]{3,}'
baseUrl = 'https://xxx.backlog.jp/api/v2/issues/'
issueIdArr = []
def findIssueId(match, str):
if match:
issueId = match.group(0)
issueIdArr.append(issueId)
# すでに検出した課題番号はヒットしないよう空文字に置き換え
str = str.replace(issueId, '')
match = re.search(pattern, str)
# 複数の課題番号が含まれているか再帰的に確認
findIssueId(match, str)
def postBacklog(issueIdArr, message, commitUrl):
for issueId in issueIdArr:
postUrl = baseUrl + issueId + '/comments'
content = '''
{message}
{url}
'''.format(message=message, url=commitUrl).strip()
payload = {
'content': content,
'apiKey': os.environ['apiKey']
}
response = requests.post(postUrl, params=payload)
logger.info(response.text)
# 配列としてevent['body']['commits']内にローカルで溜め込んだコミットの情報が含まれている
for commitRireki in event['body']['commits']:
issueIdArr = []
message = commitRireki['message']
commitUrl = commitRireki['url']
issueIdCheck = re.search(pattern, commitRireki['message'])
# 課題番号が含まれているか確認
findIssueId(issueIdCheck, commitRireki['message'])
if len(issueIdArr) != 0:
logger.info(issueIdArr)
postBacklog(issueIdArr, message, commitUrl)
3. AWSのAPIGatewayにPOSTの受け口を作る
画像の順に設定します。
マッピングテンプレートのスマートな書き方知ってるよ! って人はぜひ教えてください!!
4. GitHubの該当リポジトリにAPIGatewayに対して通知を送るWebhookを設定する
Payload URL : APIGatewayで作ったPOST先のURLを指定するよ
画像のように設定しておくと、masterブランチにプッシュされる度にGitHubがApiGatewayをたたいてくれるよ
まとめ
ざっくりとした説明でしたが以上が今回作った連携機能になります。
コミットメッセージにbacklogの課題番号を含めてpushしてもらうとlambda側でその番号を拾って指定された課題にコメントを追加しています。
backlogの課題からそれの修正のためにどのようなコード修正が行なわれたのかすぐに追えるので個人的にはとても便利です。
今回は外部のリポジトリとの連携でしたが、backlog自体のgitリポジトリを用いて開発している場合はもっと簡単に連携できるみたいですね。
拙い文章ですが、最後まで読んでいただきありがとうございました。