You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在指定Jenkins任务运行时阻止BitBucket合并拉取请求?

当然可行!我来给你分享两种实操性强的实现方案

方案一:利用BitBucket分支保护 + Jenkins构建状态动态拦截

这是最常用的方式,核心思路是通过Jenkins向BitBucket提交自定义构建状态,配合BitBucket的合并规则来阻止PR合并:

  • 第一步:配置BitBucket分支权限
    打开你的BitBucket仓库,进入「Repository settings」→「Branch permissions」,给需要保护的分支(比如main)添加规则:

    • 勾选「Require all checks to pass before merging」
    • 确保这个规则覆盖所有需要阻止合并的PR目标分支
  • 第二步:在Jenkins任务中添加状态提交脚本
    给你要监控的Jenkins任务添加两个步骤:

    1. 构建前步骤(Shell/PowerShell):任务启动时,向BitBucket提交「运行中」的状态,告诉BitBucket现在不能合并:

      # 替换成你的BitBucket实例地址、凭据变量
      curl -X POST -u ${BITBUCKET_CREDS_USR}:${BITBUCKET_CREDS_PSW} \
      "https://your-bitbucket-domain/rest/build-status/1.0/commits/${GIT_COMMIT}" \
      -H "Content-Type: application/json" \
      -d '{
          "state": "INPROGRESS",
          "key": "block_merge_task",
          "name": "Critical Jenkins Task Running",
          "description": "指定的Jenkins任务正在运行,PR合并已被阻止",
          "url": "${BUILD_URL}"
      }'
      

      这里的${GIT_COMMIT}是Jenkins内置变量,自动获取当前构建的提交ID;BITBUCKET_CREDS_USR和BITBUCKET_CREDS_PSW需要在Jenkins的「凭据管理」里配置好。

    2. 构建后步骤(无论成功/失败都执行):任务结束后,更新状态为「完成」,解除合并限制:

      curl -X POST -u ${BITBUCKET_CREDS_USR}:${BITBUCKET_CREDS_PSW} \
      "https://your-bitbucket-domain/rest/build-status/1.0/commits/${GIT_COMMIT}" \
      -H "Content-Type: application/json" \
      -d '{
          "state": "SUCCESS",
          "key": "block_merge_task",
          "name": "Critical Jenkins Task Completed",
          "description": "指定的Jenkins任务已完成,PR合并恢复允许",
          "url": "${BUILD_URL}"
      }'
      

方案二:针对定时/非PR触发的Jenkins任务(进阶)

如果你的Jenkins任务不是由PR触发的(比如定时执行的批量任务),需要阻止所有打开的PR合并,那可以在构建前先调用BitBucket API获取所有打开的PR,再逐个给对应的提交ID添加「运行中」状态:

# 获取所有打开的PR的提交ID
PR_COMMITS=$(curl -u ${BITBUCKET_CREDS_USR}:${BITBUCKET_CREDS_PSW} \
"https://your-bitbucket-domain/rest/api/1.0/projects/[PROJECT_KEY]/repos/[REPO_SLUG]/pull-requests?state=OPEN" \
| jq -r '.values[] | .fromRef.latestCommit')

# 遍历每个提交ID,添加阻止状态
for COMMIT in $PR_COMMITS; do
    curl -X POST -u ${BITBUCKET_CREDS_USR}:${BITBUCKET_CREDS_PSW} \
    "https://your-bitbucket-domain/rest/build-status/1.0/commits/${COMMIT}" \
    -H "Content-Type: application/json" \
    -d '{
        "state": "INPROGRESS",
        "key": "block_merge_task",
        "name": "Critical Jenkins Task Running",
        "description": "指定的Jenkins任务正在运行,PR合并已被阻止",
        "url": "${BUILD_URL}"
    }'
done

构建后同样遍历这些提交ID,更新状态为完成即可。

注意事项

  • 确保Jenkins服务器能正常访问BitBucket的API;
  • BitBucket用户需要拥有仓库的「Write」权限,才能修改构建状态;
  • 如果使用BitBucket Cloud,API地址和参数格式会略有不同,你可以直接搜BitBucket Build Status API调整细节。

内容的提问来源于stack exchange,提问作者wojtek1902

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:31:52