获取bitbucket中PR状态实现自动化

发布时间 2023-07-06 11:15:52作者: azureology

需求

公司使用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到后台守护既可。

参考

Solved: How can I check the status of a PR?