8

我有一个包含两个分支的存储库:masterDev我想以这样的方式配置该管道,当我将代码推送到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
4

2 回答 2

11

我面临同样的问题,但想使用拉取请求而不是简单的 git 合并。所以我最终使用了 bitbucket API 来完成这项工作:

1.创建“应用密码”

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

bitbucket 应用密码

2.为管道设置环境变量

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

3.创建bash脚本

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

#!/usr/bin/env bash

# 如果任何命令以非零状态退出,则立即退出
# eg 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 \
  --失败 --show-error --silent \
  --用户 $BB_USER:$BB_PASSWORD \
  -H '内容类型:应用程序/json' \
  -d'{
    "title": "'$BITBUCKET_BRANCH' -> '$DEST_BRANCH'",
    "description": "管道自动 PR",
    “状态”:“打开”,
    “目的地”: {
      “分支”: {
              "名称": "'$DEST_BRANCH'"
          }
    },
    “资源”: {
      “分支”: {
              "名称": "'$BITBUCKET_BRANCH'"
          }
    }
  }'\
  | sed -E "s/.*\"id\": ([0-9]+).*/\1/g"`

# 合并 PR
echo "合并 PR:$PR_ID"
curl -X POST https://api.bitbucket.org/2.0/repositories/$BITBUCKET_REPO_OWNER/$BITBUCKET_REPO_SLUG/pullrequests/$PR_ID/merge \
  --失败 --show-error --silent \
  --用户 $BB_USER:$BB_PASSWORD \
  -H '内容类型:应用程序/json' \
  -d'{
    “close_source_branch”:假,
    “merge_strategy”:“merge_commit”
  }'

4. 最终进入管道

只需调用脚本:

开发:
       - 步:
           脚本:
            - ./merge.sh 大师

好处:

  • 如果存在冲突,管道将失败(如果您希望它失败)
  • 更好地控制正在发生的事情
于 2017-11-22T13:49:13.070 回答
1

在 YAML 配置的“脚本”部分,您可以或多或少地执行您在 shell 中可以执行的任何操作,因此(尽管我从未尝试过)看不出这是不可能的原因。

换句话说,您必须:

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

正如git中可用的那样script,您可以使用普通的 git 命令,并且不需要任何特定于 Bb 管道的东西,如下所示:

 script:
    - git fetch
    - git checkout -b master
    - git merge Dev
    - git push -v --tags origin master:master

为确保仅在 Ant 作业成功时执行此操作,您应该确保在发生错误时您将获得非零退出状态(我假设这是 Ant 的默认行为)。

于 2017-05-15T09:44:11.450 回答