environment: Python3.7 flask, argparse, requests
port:5000
usage: python3 gitlabRobot.py --wechatUrl http://foo.bar
啟動(dòng)后, 在GitLab 項(xiàng)目設(shè)置 - webhook 配置即可
webhook: http://{服務(wù)器地址}/webhook
# coding=UTF-8
from flask import Flask, request, json
import argparse
import requests
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
# 請(qǐng)求參數(shù)
params = request.json
# 用戶名
user_name = params['user_name']
# 提交類型
object_kind = params['object_kind']
# 總commits數(shù)
total_commits_count = str(params['total_commits_count'])
# 項(xiàng)目名稱
repository_name = params['repository']['name']
# 分支
ref = params['ref']
# 發(fā)送內(nèi)容
content = user_name + ' ' + object_kind + '了' + total_commits_count + '個(gè)commits到' + repository_name + '倉庫的' + ref + '分支\n'
# 引用形式列出提交的id
for object in params['commits']:
content = content + '> ['+ object['id'][0:8] +']'+'('+ object['url'] +')' + ': ' + object['title'] + '\n'
body = {
"msgtype": "markdown",
"markdown": {
"content": content
}
}
requests.request('POST', url, headers={'Content-Type': 'application/json'}, json=body)
return 'OK'
if __name__ == '__main__':
#獲取ArgumentParser對(duì)象
parser = argparse.ArgumentParser()
#添加參數(shù)
parser.add_argument('--wechatUrl', type=str)
#args是一個(gè)命名空間
url = args = parser.parse_args().wechatUrl
if url is not None:
# 可以接收webhook的地址和端口,可以指定GitLab地址 自定義端口
app.run('0.0.0.0', 5000)
print("啟動(dòng)參數(shù) --wechatUrl 為空, 程序退出")