Bitbucket 管道 - 可以将一个分支合并到另一个分支
Bitbucket pipeline - possibility to merge one branch to another
我有一个包含两个分支的存储库:master 和 Dev 我想以这样的方式配置该管道,当我将代码推送到 Dev 分支并且代码构建成功,Dev 被合并到 master。不幸的是,我在 bitbucket 管道中找不到任何关于合并的信息 docs。
这是我的 yml 文件:
pipelines:
branches:
Dev:
- step:
script:
- ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME -Dsf.password=$SF_PASSWORD
有人可以帮我处理那个案子吗?如果可以的话?
--编辑
我尝试按照建议更改脚本:
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
在 YAML 配置的“脚本”部分,您可以或多或少地做您在 shell 中可以做的任何事情,所以(虽然我从未尝试过)看不出原因为什么这不可能。
换句话说,你必须:
- 将分支切换到
master
- 合并开发(可选,使用预定义的
BITBUCKET_COMMIT
环境变量,它标识您的 dev
提交)
- 承诺
master
(可能还会推送)
由于 git
在 script
中可用,您可以使用普通的 git 命令,不需要任何特定于 Bb Pipelines 的命令,例如:
script:
- git fetch
- git checkout -b master
- git merge Dev
- git push -v --tags origin master:master
为了确保仅在 Ant 作业成功时才执行此操作,您应该确保在出现错误时您将获得非零退出状态(我认为这是 Ant 的默认行为) .
我遇到了同样的问题,但想使用拉取请求而不是简单的 git 合并。所以我最终使用 bitbucket API 来完成这项工作:
1。创建"App password"
创建 "App password" 这样您就不必将自己的凭据推送到管道
(bitbucket 设置 -> 应用密码)
2。为管道设置环境变量
- BB_USER = 您的用户名
- BB_PASSWORD = 应用密码
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=
# 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]+).*//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"
}'
- 用法:
./merge.sh DESTINATION_BRANCH
- 请参阅 pipelines environment variables documentation 了解更好用的变量
- 有关二手 API
的更多信息,请参阅 bitbucket API docs
4。终于在管道中
只需调用脚本:
Dev:
- step:
script:
- ./merge.sh master
好处:
- 如果存在冲突,管道将失败(如果您希望它失败)
- 更好地控制正在发生的事情
我有一个包含两个分支的存储库:master 和 Dev 我想以这样的方式配置该管道,当我将代码推送到 Dev 分支并且代码构建成功,Dev 被合并到 master。不幸的是,我在 bitbucket 管道中找不到任何关于合并的信息 docs。
这是我的 yml 文件:
pipelines:
branches:
Dev:
- step:
script:
- ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME -Dsf.password=$SF_PASSWORD
有人可以帮我处理那个案子吗?如果可以的话?
--编辑
我尝试按照建议更改脚本:
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
在 YAML 配置的“脚本”部分,您可以或多或少地做您在 shell 中可以做的任何事情,所以(虽然我从未尝试过)看不出原因为什么这不可能。
换句话说,你必须:
- 将分支切换到
master
- 合并开发(可选,使用预定义的
BITBUCKET_COMMIT
环境变量,它标识您的dev
提交) - 承诺
master
(可能还会推送)
由于 git
在 script
中可用,您可以使用普通的 git 命令,不需要任何特定于 Bb Pipelines 的命令,例如:
script:
- git fetch
- git checkout -b master
- git merge Dev
- git push -v --tags origin master:master
为了确保仅在 Ant 作业成功时才执行此操作,您应该确保在出现错误时您将获得非零退出状态(我认为这是 Ant 的默认行为) .
我遇到了同样的问题,但想使用拉取请求而不是简单的 git 合并。所以我最终使用 bitbucket API 来完成这项工作:
1。创建"App password"
创建 "App password" 这样您就不必将自己的凭据推送到管道 (bitbucket 设置 -> 应用密码)
2。为管道设置环境变量
- BB_USER = 您的用户名
- BB_PASSWORD = 应用密码
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= # 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]+).*//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" }'
- 用法:
./merge.sh DESTINATION_BRANCH
- 请参阅 pipelines environment variables documentation 了解更好用的变量
- 有关二手 API 的更多信息,请参阅 bitbucket API docs
4。终于在管道中
只需调用脚本:
Dev: - step: script: - ./merge.sh master
好处:
- 如果存在冲突,管道将失败(如果您希望它失败)
- 更好地控制正在发生的事情