获取Jenkins中的原始主数据和PR提交ID

djmepvbi  于 2022-11-02  发布在  Jenkins
关注(0)|答案(1)|浏览(189)

我在一个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做了一些更新,破坏了这个语法。
有没有别的方法?

kkbh8khc

kkbh8khc1#

好吧,让我们试着弄清楚。

TARGET = git rev-parse origin/master^{commit}
SOURCE = git rev-parse pull-requests/BRANCH/from^{commit}
RANGE = git log $TARGET...$SOURCE

目标
这些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]**接收,否则你会得到下一个消息,如下所示:

fatal: ambiguous argument '<remote>/<ref>^{commit}': unknown revision or path not in the working tree.

来源

TARGET相同,您需要确保远程存储库确实有“分支”pull-requests/BRANCH/from

提交范围

刚才的电话是这样的:git log --oneline TARGET...SOURCE它返回TARGET和SOURCE之间的增量,包括来自origin/master的最后提交和来自branches的拉取请求/分支/
我不知道你到底想归档什么,但我会假设只是合并或合并前检查提交。
1.应检查作业参数(源分支等)
1.检查远程资料档案库引用
1.我建议使用API从refs中获取最后的提交(它不需要克隆整个仓库)

相关问题