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

Ada*_*amo 6 bitbucket bitbucket-pipelines

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

那是我的yml文件:

pipelines:
  branches:
    Dev:
      - step:
          script:
            - ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME -Dsf.password=$SF_PASSWORD
Run Code Online (Sandbox Code Playgroud)

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

- 编辑

我尝试将脚本更改为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
Run Code Online (Sandbox Code Playgroud)

结果:

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.
Run Code Online (Sandbox Code Playgroud)

并且错误:

+ git checkout master
error: pathspec 'master' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)

- 解

  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
Run Code Online (Sandbox Code Playgroud)

sve*_*tka 7

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

1.创建“应用密码”

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

Bitbucket应用密码

2.设置管道的环境变量

  • BB_USER =您的用户名
  • BB_PASSWORD =应用密码

3.创建bash脚本

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

#!/ usr / bin / env bash

#如果任何命令以非零状态退出,则立即退出
#例如pull-request合并由于冲突而失败
设置-e

#设置目标分支
DEST_BRANCH = $ 1

#创建新的拉取请求并获取其ID
echo“创建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'内容类型:application / json'\
  -d'{
    “ title”:“'$ BITBUCKET_BRANCH'->'$ DEST_BRANCH'”,
    “ description”:“管道自动PR”,
    “ state”:“ OPEN”,
    “目的地”:{
      “分支”:{
              “名称”:“'$ DEST_BRANCH'”
          }
    },
    “资源”: {
      “分支”:{
              “名称”:“'$ BITBUCKET_BRANCH'”
          }
    }
  }'\
  | sed -E“ s /.* \” id \“:([0-9] +)。* / \ 1 / g”`

#合并公关
回声“合并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'内容类型:application / json'\
  -d'{
    “ close_source_branch”:否,
    “ merge_strategy”:“ merge_commit”
  }'

4.最后进入管道

只需调用脚本即可:

开发人员:
       - 步:
           脚本:
            -./merge.sh主文件

优点:

  • 如果发生冲突,管道将失败(如果您希望失败)
  • 更好地控制正在发生的事情


Blu*_*ueM 5

在 YAML 配置的 \xe2\x80\x9cscript\xe2\x80\x9d 部分中,您或多或少可以在 shell 上执行任何可以执行的操作,因此(尽管我\xe2\x80\x99 从未尝试过)不要\ xe2\x80\x99t 明白为什么这\xe2\x80\x99 不可能。

\n\n

换句话说,你\xe2\x80\x99d 必须:

\n\n
    \n
  • 将分支切换到master
  • \n
  • 合并开发(可选地,使用预定义的BITBUCKET_COMMIT环境变量,它标识您的dev提交)
  • \n
  • 致力于master(也可能推动)
  • \n
\n\n

正如git中提供的那样script,您可以使用普通的 git 命令,并且不需要任何特定于 Bb Pipelines 的内容,如下所示:

\n\n
 script:\n    - git fetch\n    - git checkout -b master\n    - git merge Dev\n    - git push -v --tags origin master:master\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了确保仅在 Ant 作业成功时才完成此操作,您应该确保在发生错误时,您\xe2\x80\x99 将获得非零退出状态(我假设是 Ant\xe2\x80 \x99s 默认行为)。

\n

  • 我把事情简化了一点。您的分支“master”不会自动存在,但您必须先“git fetch”(定义了远程,*但是*:您必须插入部署密钥,否则您将无法从远程获取)你可以`git checkout master`。 (2认同)