gpt4 book ai didi

ant - 使用 Jenkins、Perforce 和 Ant,我如何才能仅对自上次绿色构建以来已更改的文件运行 PMD?

转载 作者:行者123 更新时间:2023-12-05 01:33:01 26 4
gpt4 key购买 nike

鉴于:

  • 似乎没有简单的方法来获取 Jenkins 中“已更改”文件的列表(参见 herehere)
  • 似乎没有快速的方法来获取自标签 xxxx 以来更改的文件列表

我怎样才能优化我们的构建,以便在我们运行 PMD 时它只针对自上次绿色构建以来修改过的文件运行。

稍微备份一下……我们的 PMD 需要 3-4 分钟来运行大约 150 万行代码,如果发现问题,报告总是会在完成之前耗尽内存。我很想缩短我们构建时间的几分钟时间,并获得有关失败的良好报告。我最初的做法是:

  • 从 Jenkins 获取变更列表
  • 针对该列表和 pmd_failures.txt 的内容的联合运行 PMD
  • 如果 PMD 失败,请在 pmd_failures.txt 中包含失败文件列表

比我想要的更复杂,但值得拥有一个更快但仍然可靠的构建。

当我意识到 Jenkins 不会轻易给我想要的东西时,我意识到还有另一种可能的方法。我们标记每个绿色构建。我可以简单地获取自标签以来更改的文件列表,然后我可以完全删除 pmd_failures.txt。

没有骰子。自从 Perforce 的标签 xxxx 以来,获取文件列表的想法似乎从未被简化过:

    $ p4 files //path/to/branch/...@label > label.out    $ p4 files //path/to/branch/...@now > now.out    $ diff label.out now.out

这很烦人,但更重要的是,对于我们成千上万的文件来说,比简单地运行 PMD 还要慢。

所以现在我正在考虑尝试将 PMD 与其他构建内容并行运行,这仍然是在浪费时间和资源,并使我们的构建更加复杂。在我看来,我无法轻易地从 Jenkins 或 Perforce 获得已更改文件的列表,这很愚蠢。有没有其他人找到这些问题的合理解决方法?

最佳答案

我想我已经找到了答案,如果有效,我会将我的答案标记为正确。

它比我想要的要复杂一些,但我认为节省 3-4 分钟(以及潜在的内存问题)是值得的。

  1. 在良好的构建结束时,将良好的更改列表保存为 Perforce 计数器。 (构建后任务)。看起来像这样:
    $ p4 counter last_green_trunk_cl %P4_CHANGELIST%
  2. 运行 PMD 时,将计数器读入属性 last.green.cl 并从以下位置获取文件列表:
    $ p4 files //path/to/my/branch/...@${last.green.cl},now//path/to/my/branch/myfile.txt#123 - edit change 123456 (text)//path/to/my/branch/myotherfile.txt#123 - add change 123457 (text)etc...(have to parse the output)
  3. 对这些文件运行 PMD。

这样我们就不需要 pmd_failures.txt,我们只对自上次绿色构建以来发生更改的文件运行 PMD。

[编辑:将其更改为使用 p4 计数器,这比 checkin 文件要快得多。另外,这是非常成功的,所以我将其标记为已回答]

关于ant - 使用 Jenkins、Perforce 和 Ant,我如何才能仅对自上次绿色构建以来已更改的文件运行 PMD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com