Jenkins:如何检查 PullRequest 文件夹中的文件自上次构建以来是否发生了变化?

Jenkins: How to check if files in a folder of the PullRequest changed since the last build?

这似乎是一个很受欢迎的问题,但都有不同的方差,我无法深究它。

我的 git 存储库有 2 个项目,每个项目都在一个单独的文件夹中。我想通过拉取请求触发 Jenkins CI,并且仅当该文件夹的子文件夹中的文件自上次提交后发生更改时,才为特定项目构建 运行。

我学会了如何通过拉取请求触发 Jenkins CI(使用 MultiBranchPipeline Jenkins 项目类型)。

我可以在 CI(我的存储库中的 JenkinsFile)中执行脚本。

此外,我知道如何检测上次提交中特定子文件夹中是否有任何文件发生更改(git diff HEAD^ HEAD Frontend/)。

但我不知道如何识别拉取请求中的提交,因此我可以检查子文件夹中这 2 个提交的更改。

问题:我如何知道拉取请求中的提交是什么?

或结束题:

问题:如何检查 PullRequest 文件夹中的文件自上次构建以来是否发生了变化?

P.S。我知道 Jenkins 知道这一点,因为在日志中我看到了修订:

Checking out Revision 88f657f0d3c63c43ba3b07686c93a640ca681e00 (PR-4)

如何在脚本级别访问它?

谢谢!

在谷歌搜索并没有带来任何成果后,我想出了一个解决方法:我没有尝试从 Jenkins 中提取信息,而是决定从 Git 中提取信息,幸运的是它有一个很好的命令,显示分支或提交之间的增量:

git merge-base HEAD origin/master

唯一的问题是,出于某种原因,Jenkins 作为 PR 的一部分从 Github 中提取的回购协议没有看到 'origin/master':它只看到了 'origin/PR-xyz'。即使我做了 'get fetch origin master' 也无济于事。

所以我不得不手动添加一个遥控器。由于在 PR 打开时 Jenkins 保留了 repo,因此我添加了 'if' 以确保顺序 PR 运行不会因为远程已经存在而失败:

        String remotes = powershell script:'git remote', returnStdout:true
        echo 'Remotes: '+remotes                
        if( !remotes.contains('github') )
        {
            echo 'Adding github remote'
            powershell script:'git remote add github https://github.com/SeredaOM/JenkinsLearning.git'
            powershell script:'git fetch github master'
        }

P.S。如果有人有更好的解决方案请告诉我,这将是一个很好的学习material。