首页 > 解决方案 > 在 Jenkins 管道插件的拉取请求中未检测到更改

问题描述

我已将 Jenkins 配置为基于拉取请求 (PR) 构建。我们的存储库是一个多项目存储库,我创建了一个脚本来检测对源代码所做的更改,并且只运行与其中发生更改的项目相关的测试(根据更改的文件的路径):

def getChangedProjects() {
  Set projects = []
  def changeLogSets = currentBuild.changeSets
  for (int i = 0; i < changeLogSets.size(); i++) {
      def entries = changeLogSets[i].items
      for (int j = 0; j < entries.length; j++) {
          def entry = entries[j]
          def files = new ArrayList(entry.affectedFiles)
          for (int k = 0; k < files.size(); k++) {
            def file = files[k]
            // get the project folder name and
            // add it to changed projects set
            projects.add(file.path.tokenize('/')[1])
          }
      }
  }
  return projects.findAll {it != null}
}

Groovy 函数按预期工作并检测已更改的文件夹。

问题是大多数时候詹金斯不会显示詹金斯的任何变化:

未显示更改

但是 PR 确实包含对文件的更改,我当然可以在 Github 中看到这些更改。

任何人都知道为什么詹金斯没有显示变化?

标签: jenkinsjenkins-pluginsjenkins-pipeline

解决方案


您可以通过在 Jenkins 管道脚本中包含Git Changelog步骤来创建更改日志。

插件提供了一个上下文对象,其中包含创建变更日志所需的所有信息。它还可以提供一个字符串,该字符串是呈现的变更日志,准备发布。

是此插件生成的示例 Git 更改日志的屏幕截图:

Git 变更日志


关于这个插件的更多信息可以在它的wiki中找到。

希望能帮助到你。


推荐阅读