Jum*_*wah 5 git bitbucket google-cloud-platform google-cloud-build
我有一个 CloudBuild 触发器设置来监听 bitbucket 存储库。构建完成后,我有一个云函数,它会向提交的作者发送一条松弛消息。
我遇到的问题是 bitbucket 触发repo:push分支创建(通过他们的 UI)。这会触发构建,然后通知源分支的最后一次提交的作者新的构建已准备就绪。
为了防止这种情况,我决定如果触发分支上的最后一次提交也在 master(源分支)上,则防止触发松弛消息。我已经尝试了多种方法,但触发时使用的 CloudBuild 克隆似乎不是完整克隆。我不太清楚本地存储库处于什么状态...看起来 CloudBuild 可能会master在本地调用分支,无论哪个分支触发了构建?例如,这样的命令:
- name: 'gcr.io/cloud-builders/git'
entrypoint: /bin/bash
args:
- -c
- |
# Write the author name to the cloud build output
git show -s --format='%ae' $COMMIT_SHA >> /builder/outputs/output
# Write the latest commit to the output.
git rev-list ^master $COMMIT_SHA -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)
即使存在mybranch无法访问的更改,也会提供空白输出master。以下类似命令具有相同的结果:
git log master..$COMMIT_SHA --oneline -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)
当我在本地运行时,这两个命令都正确返回分支提交。
如果我添加一些像这样的显式结账步骤(在 rev-list 之前):
git checkout origin master
git checkout origin $BRANCH_NAME
Run Code Online (Sandbox Code Playgroud)
我明白了:
From https://source.developers.google.com/p/myproject/r/bitbucket_myproject_myrepo
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
fatal: refusing to merge unrelated histories
From https://source.developers.google.com/p/myproject/r/bitbucket_myproject_myrepo
* branch feature/mybranch -> FETCH_HEAD
* [new branch] feature/mybranch -> origin/feature/mybranch
Already up to date.
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这个命令
git log master..$BRANCH_NAME --oneline -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)
抛出这个错误
fatal: ambiguous argument 'master..feature/mybranch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Run Code Online (Sandbox Code Playgroud)
然而,这个命令不会(但给我留下了可怕的空白值):
git log master..$COMMIT_SHA --oneline -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)
我超级困惑。谁能帮助我了解 CloudBuild 在执行该FETCHSOURCE步骤时到底做了什么?
FETCHSOURCE
Initialized empty Git repository in /workspace/.git/
From https://source.developers.google.com/p/myproject/r/bitbucket_myproject_myrepo
* branch 1ed4397bd9825b3eb9fe8dca12409b06975a9c41 -> FETCH_HEAD
HEAD is now at 1ed4397 some commit message
Run Code Online (Sandbox Code Playgroud)
以及如何实现获取仅出现在我的分支(而不是主分支)上的提交列表的目标?
- - 更新 - -
在 @bhito 建议浅层获取之后,我几乎能够在本地重现,但仍然存在我无法解决的差异。在本地执行以下操作:
$ git init
$ git remote add origin myrepo
$ git fetch --depth 1 origin b72b37
$ git checkout FETCH_HEAD
$ git fetch --unshallow
$ git rev-list ^master feature/mybranch -1
fatal: bad revision '^master'
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
$ git checkout master
$ git checkout feature/mybranch
$ git rev-list ^master feature/mybranch -1
Run Code Online (Sandbox Code Playgroud)
有用!!但仅限于本地。我的重现不太正确,因为在 CloudBuild 克隆中,当我尝试检查 master 时,我得到:
Step #0 - "Setting deployment environment": Already on 'master'
Run Code Online (Sandbox Code Playgroud)
看来 CloudBuild 将提交提取到名为 master 的分支上...我不确定如何,所以无法弄清楚如何返回到我可以执行的位置rev-list
| 归档时间: |
|
| 查看次数: |
2053 次 |
| 最近记录: |