我有一个包含两个分支的存储库: 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
答案 0 :(得分:3)
我遇到了同样的问题,但想使用pull请求而不是简单的git merge。所以我最终为这项工作使用了bitbucket API:
创建“应用程序密码”,这样您就不必将自己的凭据推送到管道 (bitbucket设置 - &gt;应用密码)
我有一个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" }'
./merge.sh DESTINATION_BRANCH
只需调用脚本:
Dev: - step: script: - ./merge.sh master
答案 1 :(得分:1)
在YAML配置的“脚本”部分,您可以在shell上执行或多或少的任何操作,因此(虽然我从未尝试过)但是没有看到为什么不应该这样做的原因可能的。
换句话说,你必须:
master
BITBUCKET_COMMIT
环境变量,用于标识您的dev
提交)master
(可能也推) git
中可以使用script
,您可以使用普通的git命令,不需要任何特定于Bb管道的内容,即:您只需执行类似...
script:
- git checkout master
- etc.
要确保只有在Ant作业成功时才会这样做,您应该确保在出现错误的情况下,您将获得非零退出状态(我认为这是Ant的默认行为)。 / p>