需求
公司使用bitbucket管理源码,提PR需要CI通过机器人用户同意后合入。
希望通过自动化方案在bot同意并合入PR后触发某些操作,自己没有webhook权限。
实现
可以通过调用bitbucket提供的api进行状态查寻
获取Cookies
使用Chrome正常登陆bitbucket并从控制台获取Cookies
查寻状态
使用Python获取API状态
#!/usr/bin/python3
import json
import requests
COOKIE='_atl_bitbucket_remember_me=ZTJmOWMzYWE**************gzYmQx; BITBUCKETSESSIONID=2395C34********638'
ID = '629'
# get first day of this month
url = 'https://bitbucket.********.ai/rest/api/1.0/projects/PC/repos/********/pull-requests/' + str(ID)
headers = {
'Cookie': COOKIE,
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
'Referer': 'https://bitbucket.*******.ai/projects/PC/repos/********/pull-requests'
}
response = requests.get(url=url, headers=headers, verify=False)
data = json.loads(response.content.decode())
assert len(data), "Empty response!"
# select valid date
print("State =", data['state'])
if(data['state'] == "MERGED"):
print("Ready to merge!")
exit(0)
exit(1)
当PR状态为MERGED时脚本exit code = 0 否则为1
自动化操作
使用shell脚本掉取python返回值进行自动化,每10分钟一次轮询。
#!/bin/bash
while true; do
date
python3 ./bitbucket.py
if [ $? -eq 0 ];then
# do something on success
echo "PR MERGED!"
exit 0
fi
# check every 10min
sleep 600
done
使用screen session执行脚本detech到后台守护既可。