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

时间:2017-05-13 14:32:11

标签: bitbucket bitbucket-pipelines

我有一个包含两个分支的存储库: master Dev ,我想以这样的方式配置pipline,当我将代码推送到 Dev < / strong>分支和代码构建成功, 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 个答案:

答案 0 :(得分:3)

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

1。创建“应用密码”

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

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

优点:

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

答案 1 :(得分:1)

在YAML配置的“脚本”部分,您可以在shell上执行或多或少的任何操作,因此(虽然我从未尝试过)但是没有看到为什么不应该这样做的原因可能的。

换句话说,你必须:

  • 将分支切换为master
  • 合并dev(可选,使用预定义的BITBUCKET_COMMIT环境变量,用于标识您的dev提交)
  • 承诺master(可能也推)

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

的操作。
script:
  - git checkout master
  - etc.

要确保只有在Ant作业成功时才会这样做,您应该确保在出现错误的情况下,您将获得非零退出状态(我认为这是Ant的默认行为)。 / p>