Bitbucket Data Center 9.4与Jira集成的合并检查配置及密钥提取问题
解决Bitbucket Data Center 9.4与Jira集成的PR合并阻塞检查问题
一、原JQL检查无效的修复
你的原JQL逻辑完全错误,导致无法检测工单被阻塞的情况。
错误根源
原JQL:
status in ("In Progress", "Open", "In Review", "Resolved") AND issue NOT IN linkedIssues($key, "is blocked by") AND issue NOT IN linkedIssues($key, "blocks")
linkedIssues($key, "is blocked by")返回的是阻塞$key这个工单的所有问题,而非$key工单本身。issue NOT IN linkedIssues(...)这个条件永远成立——工单不可能出现在阻塞自己的列表里,所以这个检查等于虚设,自然拦不住合并。
正确JQL写法
要实现“工单未被阻塞才允许合并”,需检查工单没有"Is blocked by"类型的关联问题,同时状态符合要求:
有ScriptRunner插件(推荐)
status in ("In Progress", "Open", "In Review", "Resolved") AND NOT issueFunction in hasLinks("is blocked by")
issueFunction in hasLinks("is blocked by")会筛选出所有被阻塞的工单,加NOT后只有未被阻塞的工单能通过检查。
无ScriptRunner的原生JQL写法
status in ("In Progress", "Open", "In Review", "Resolved") AND linkedIssues("Is blocked by") is empty
linkedIssues("Is blocked by") is empty直接判断当前工单没有阻塞它的关联问题,逻辑更直白。
二、%key解析异常与分支密钥提取失败的修复
错误原因
- 变量格式错误:Bitbucket Push Checks的合法变量是
$key(从提交消息提取工单密钥)或$branch(分支名),而非%key,错误的变量格式导致解析出带方括号的异常值。 - 分支正则匹配错误:从
bugfix/FUI-1234这类分支名中提取密钥,需要正确的正则表达式来精准匹配工单密钥格式。
解决步骤
- 替换为标准变量:将JQL中的
%key全部替换为$key;若依赖分支名提取密钥,确保开启分支提取选项。 - 配置分支密钥提取正则:
进入Bitbucket项目设置→Hooks→Issue-Key checks,找到"Branch name pattern",填入以下正则:
该正则可匹配所有「大写字母-数字」格式的工单密钥(如[A-Z]+-\d+FUI-1234),不受分支名前缀影响。同时勾选"Extract issue keys from branch names",让Bitbucket自动将分支中的密钥赋值给$key。 - 适配分支提取的JQL:若依赖分支名提取密钥,JQL可写为:
issue = $key AND status in ("In Progress", "Open", "In Review", "Resolved") AND linkedIssues("Is blocked by") is empty
三、验证流程
- 创建一个Jira工单,给它添加"Is blocked by"类型的关联(使其处于被阻塞状态)。
- 在Bitbucket创建对应工单的分支,提交代码并发起PR。
- 尝试合并PR,此时Push Check应阻止合并,并提示关联工单被阻塞。
- 移除Jira工单的阻塞关联后,再次尝试合并,应能正常通过检查。
内容的提问来源于stack exchange,提问作者Petro Kostiuk
相关产品推荐
相关产品推荐

