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

如何通过Bitbucket Pipeline在同一仓库创建Pull Request?

用Bitbucket Pipeline创建同一仓库Pull Request的实操方法

1. 前置准备

  • 给Pipeline配置仓库读写权限:在Bitbucket仓库的「Pipeline」→「Settings」中开启权限,或者创建带repo:write、pullrequest:write权限的App Password,将用户名和密码分别存为Pipeline变量BITBUCKET_USERNAME和BITBUCKET_APP_PASSWORD。

2. 创建新Pull Request的Pipeline配置

在仓库根目录的bitbucket-pipelines.yml中添加触发规则和执行步骤,示例如下:

pipelines:
  branches:
    feature/*: # 匹配你的源分支规则,比如所有feature开头的分支
      - step:
          name: 自动创建PR
          script:
            # 调用Bitbucket REST API创建PR
            - curl -s https://api.bitbucket.org/2.0/repositories/${BITBUCKET_WORKSPACE}/${BITBUCKET_REPO_SLUG}/pullrequests \
                -u ${BITBUCKET_USERNAME}:${BITBUCKET_APP_PASSWORD} \
                -H "Content-Type: application/json" \
                -X POST \
                -d '{
                  "source": {
                    "branch": {
                      "name": "'${BITBUCKET_BRANCH}'"
                    }
                  },
                  "destination": {
                    "branch": {
                      "name": "main" # 替换为你的目标分支,比如master
                    }
                  },
                  "title": "自动提交:'${BITBUCKET_BRANCH}' 合并到main",
                  "description": "### 变更说明\n- 完成XX功能开发\n- 修复#123号BUG\n\n### 测试情况\n已通过单元测试"
                }'

说明:

  • ${BITBUCKET_BRANCH}是Pipeline内置变量,自动获取当前触发分支的名称
  • PR标题和描述可根据需求自定义,比如读取项目的CHANGELOG内容、拼接最近的提交信息等

3. 推送代码触发PR

当你将代码推送到匹配规则的分支(如feature/user-login),Pipeline会自动执行上述步骤,直接在仓库中创建对应PR。如果需要手动触发,也可以在Bitbucket的Pipeline页面选择对应分支运行。

4. 更新过时的源分支

如果目标分支有新提交导致源分支过时,可在Pipeline中添加分支更新步骤,再同步更新PR:

pipelines:
  branches:
    feature/*:
      - step:
          name: 更新源分支并同步PR
          script:
            # 配置Git用户信息
            - git config --global user.email "pipeline@bitbucket.com"
            - git config --global user.name "Bitbucket Pipeline"
            # 安装jq工具用于解析API返回结果
            - apt-get update && apt-get install -y jq
            # 拉取目标分支最新代码
            - git fetch origin main
            # 合并目标分支到当前源分支(无冲突时自动合并)
            - git merge origin/main --no-edit
            # 推送更新后的源分支
            - git push origin ${BITBUCKET_BRANCH}
            # 查询当前分支是否已有PR
            - PR_ID=$(curl -s https://api.bitbucket.org/2.0/repositories/${BITBUCKET_WORKSPACE}/${BITBUCKET_REPO_SLUG}/pullrequests?source.branch.name=${BITBUCKET_BRANCH} \
                -u ${BITBUCKET_USERNAME}:${BITBUCKET_APP_PASSWORD} | jq -r '.values[0].id')
            # 存在则更新PR描述,不存在则创建新PR
            - if [ -n "$PR_ID" ]; then
                curl -s https://api.bitbucket.org/2.0/repositories/${BITBUCKET_WORKSPACE}/${BITBUCKET_REPO_SLUG}/pullrequests/$PR_ID \
                  -u ${BITBUCKET_USERNAME}:${BITBUCKET_APP_PASSWORD} \
                  -H "Content-Type: application/json" \
                  -X PUT \
                  -d '{
                    "description": "### 已更新源分支\n- 合并main分支最新变更\n\n### 原变更内容\n- 完成XX功能开发\n- 修复#123号BUG"
                  }';
              else
                curl -s https://api.bitbucket.org/2.0/repositories/${BITBUCKET_WORKSPACE}/${BITBUCKET_REPO_SLUG}/pullrequests \
                  -u ${BITBUCKET_USERNAME}:${BITBUCKET_APP_PASSWORD} \
                  -H "Content-Type: application/json" \
                  -X POST \
                  -d '{
                    "source": {
                      "branch": {
                        "name": "'${BITBUCKET_BRANCH}'"
                      }
                    },
                    "destination": {
                      "branch": {
                        "name": "main"
                      }
                    },
                    "title": "更新后:'${BITBUCKET_BRANCH}' 合并到main",
                    "description": "### 已更新源分支\n- 合并main分支最新变更\n\n### 原变更内容\n- 完成XX功能开发\n- 修复#123号BUG"
                  }';
              fi

注意:如果合并时出现冲突,Pipeline会直接失败,需要手动解决冲突后重新推送代码。

5. 关键注意点

  • App Password的权限要最小化,只分配必要的仓库和PR操作权限
  • Pipeline内置变量${BITBUCKET_WORKSPACE}和${BITBUCKET_REPO_SLUG}会自动填充,无需手动配置
  • 私有仓库必须通过App Password认证才能调用Bitbucket API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:03:25