我在一个groovy脚本中有下面的代码,用于获取origin/master当前提交ID,然后从bitbucket存储库中获取当前pull请求的最新提交ID
TARGET_COMMIT=sh(returnStdout: true, script: "git rev-parse origin/master^{commit}").trim()
SOURCE_COMMIT=sh(returnStdout: true, script: "git rev-parse pull-requests/" + env.BRANCH_NAME + "/from^{commit}").trim()
COMMIT_RANGE="$TARGET_COMMIT...$SOURCE_COMMIT"
第一行代码在本地计算机中运行时可以正常工作,但在Jenkins中失败,
+ git rev-parse origin/master^{commit}
fatal: ambiguous argument 'origin/master^{commit}': unknown revision or path not in the working tree.
将脚本更改为使用git rev-parse upstream/master^{commit}
在Jenkins中可以工作,但在本地失败,并出现相同的错误。SOURCE_COMMIT
的第二个命令在本地和Jenkins中均失败。
这个设置运行得很好,但是我相信Bitbucket做了一些更新,破坏了这个语法。
有没有别的方法?
1条答案
按热度按时间kkbh8khc1#
好吧,让我们试着弄清楚。
目标
这些git命令中的关键点是remote name/alias和branches/refs你有下一个remote name(在你的机器或Jenkins runner上本地命名的仓库)。
您可以调用
git remote -vv
来查看您所有的遥控器。您在本地计算机上有origin,在Jenkins runner上有pull-requests。它是第一个(origin/master)下一个是分支name(origin/master)如果远程仓库有next ref -〈origin/master〉,它可以在本地机器或Jenkins runner上通过**git clone,git fetch,git pull [--rebase]**接收,否则你会得到下一个消息,如下所示:
来源
与TARGET相同,您需要确保远程存储库确实有“分支”
pull-requests/BRANCH/from
提交范围
刚才的电话是这样的:
git log --oneline TARGET...SOURCE
它返回TARGET和SOURCE之间的增量,包括来自origin/master的最后提交和来自branches的拉取请求/分支/我不知道你到底想归档什么,但我会假设只是合并或合并前检查提交。
1.应检查作业参数(源分支等)
1.检查远程资料档案库引用
1.我建议使用API从refs中获取最后的提交(它不需要克隆整个仓库)