如何在 jenkins 多分支脚本管道中获取最新的 git 提交作者姓名或消息并在分支条件下使用

How to get latest git commit author name or message in jenkins multibranch scripted pipeline and use under branch condition

我们在 jenkins 中使用 github 组织扫描作业,根据某些名称过滤器自动扫描组织中的所有相关回购,并自动触发指定分支正则表达式的构建。该管道运行良好,节省了大量时间,无需为每个 repo 手动配置作业。所有这些 repos 都使用 maven build 来构建快照和发布工件。由于我们正在尝试使包括发布过程在内的所有事情自动化,我们现在所做的是拥有一个外部化的 jenkinsfile(脚本化),这些 repos 使用并且该文件具有不同分支的所有条件,如 dev、uat、release 和 master。该方法是代码开发从快照版本的开发开始,并继续部署直到发布日临近,那个时间点通过 PR 等将开发合并到发布,并启动发布分支下的自动发布构建詹金斯的回购工作。发布分支构建基本上使用 Maven 发布插件首先通过删除工件版本的 -SNAPSHOT 来编辑远程存储库中的 pom,然后对工件进行部署,然后再次提交回 github 存储库中的增量版本pom.xml 在同一发布分支中。我在 jenkinsfile 中添加了一个额外的步骤,用于提取最新版本,合并到 dev,然后推回远程 dev,以便 dev 在 pom.xml 中具有正确的增量 SNAPSHOT 版本。所有这些工作正常并且可以完成工作。问题是,当发布构建开始并将两个提交提交到远程 repo 发布分支时(先截断 -SNAPSHOT,然后在 pom.xml 中添加递增的 SNAPSHOT 版本),这又会触发另一个构建,您必须手动停止否则循环将无休止地进行。 我们的单个 jenkinsfile 包含所有分支检查,例如:-

if (env.BRANCH_NAME == 'release')

现在有没有一种方法可以在 if 语句中添加一个 and 条件来执行类似以下操作:- 如果最新签出的提交没有作者“xyz”或其消息!~“[maven-release-plugin]*” 这意味着如果这些自动提交是由 maven 发布插件进行的,那么在触发下一个构建的那一刻,它不会做任何事情,因为分支的 if 条件和上述额外条件会使它无效。 问题是如何实现上述解决方案或者这里可能有一些类似的替代方案。

我能够使用以下方法实现此目的:-

def author = sh(returnStdout: true, script: "git log -1 --pretty=format:'%an'").trim()
     echo "$author"
        
        if (env.BRANCH_NAME == 'release' && author != 'xyz')