首页 文章

Bitbucket管道 - 将一个分支合并到另一个分支的可能性

提问于
浏览
5

我有一个包含两个分支的存储库: masterDev 我希望以这样的方式配置该pipline,当我将代码推送到 Dev 分支并且代码构建成功时, Dev 被合并到 master . 不幸的是,我无法找到有关合并bitbucket piplines docs的任何信息 .

那是我的yml文件:

pipelines:
  branches:
    Dev:
      - step:
          script:
            - ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME -Dsf.password=$SF_PASSWORD

那个案子可以帮助我吗?如果有可能吗?

  • 编辑

我尝试将脚本更改为sugest:

pipelines:
  branches:
    Dev:
      - step:
          script:
            - ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME -Dsf.password=$SF_PASSWORD
            - git remote -v
            - git fetch
            - git checkout master
            - git merge Dev
            - git push -v --tags origin master:master

结果:

git remote -v
+ git remote -v
origin  git@bitbucket.org:repository/project.git (fetch)
origin  git@bitbucket.org:repository/project.git (push)

git fetch origin
+ git fetch origin
Warning: Permanently added the RSA host key for IP address ..... to the list of known hosts.

并且错误:

+ git checkout master
error: pathspec 'master' did not match any file(s) known to git.
Dev:
       - step:
           script:
            - ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME Dsf.password=$SF_PASSWORD
             - git fetch
             - git checkout -b master
             - git merge Dev
             - git push -v --tags origin master:master

2 回答

  • 3

    在YAML配置的“脚本”部分,您可以在shell上执行或多或少的任何操作,因此(尽管我从未尝试过),但是没有理由认为这不可能 .

    换句话说,你必须:

    • 将分支切换到 master

    • 合并dev(可选,使用预定义的 BITBUCKET_COMMIT 环境变量,它标识您的 dev 提交)

    • 承诺 master (也可能推)

    由于 gitscript 中可用,您可以使用普通的git命令,不需要任何特定于Bb管道的内容,即:您只需执行类似...

    script:
      - git checkout master
      - etc.
    

    要确保仅在Ant作业成功时才执行此操作,您应确保在出现错误时将获得非零退出状态(我认为这是Ant的默认行为) .

  • 1

    我遇到了同样的问题,但是想使用pull请求而不是简单的git merge . 所以我最终为这项工作使用bitbucket API:

    1.创建“应用密码”

    创建“应用程序密码”,这样您就不必将自己的凭据推送到管道(bitbucket设置 - >应用程序密码)

    bitbucket app password

    2.设置管道的环境变量

    • BB_USER =您的用户名

    • BB_PASSWORD = app密码

    3.创建bash脚本

    我有一个bash脚本,它从 $BITBUCKET_BRANCH 创建拉取请求并立即合并

    #!/usr/bin/env bash
    
    # Exit immediately if a any command exits with a non-zero status
    # e.g. pull-request merge fails because of conflict
    set -e
    
    # Set destination branch
    DEST_BRANCH=$1
    
    # Create new pull request and get its ID
    echo "Creating PR: $BITBUCKET_BRANCH -> $DEST_BRANCH"
    PR_ID=`curl -X POST https://api.bitbucket.org/2.0/repositories/$BITBUCKET_REPO_OWNER/$BITBUCKET_REPO_SLUG/pullrequests \
      --fail --show-error --silent \
      --user $BB_USER:$BB_PASSWORD \
      -H 'content-type: application/json' \
      -d '{
        "title": "'$BITBUCKET_BRANCH' -> '$DEST_BRANCH'",
        "description": "automatic PR from pipelines",
        "state": "OPEN",
        "destination": {
          "branch": {
                  "name": "'$DEST_BRANCH'"
              }
        },
        "source": {
          "branch": {
                  "name": "'$BITBUCKET_BRANCH'"
              }
        }
      }' \
      | sed -E "s/.*\"id\": ([0-9]+).*/\1/g"`
    
    # Merge PR
    echo "Merging PR: $PR_ID"
    curl -X POST https://api.bitbucket.org/2.0/repositories/$BITBUCKET_REPO_OWNER/$BITBUCKET_REPO_SLUG/pullrequests/$PR_ID/merge \
      --fail --show-error --silent \
      --user $BB_USER:$BB_PASSWORD \
      -H 'content-type: application/json' \
      -d '{
        "close_source_branch": false,
        "merge_strategy": "merge_commit"
      }'
    

    4.最后在管道中

    只需调用脚本:

    Dev:
           - step:
               script:
                - ./merge.sh master
    

    好处:

    • 如果存在冲突(如果您希望失败),管道将失败

    • 更好地控制正在发生的事情

相关问题