如何为 Jenkins Pipeline 指定 git smudge 过滤?

How to specify git smudge filtering for Jenkins Pipeline?

在我的 git 存储库中,我使用具有 $Id$ 内容的文件,这些文件将自动获得 smudged/cleaned。 为此,我配置 .gitattributes 以激活 ident 过滤器,如 https://git-scm.com/book/en/v2/Customizing-Git-Git-AttributesKeyword Expansion 章节中所述。到目前为止,我会对提交编号感到满意。

记录的行为在我的 Windows 机器上在本机和 cygwin 中都有效,并且在我 checkout/commit 手动时在 Ubuntu 20 框上有效。我还有一个处理文件的 Jenkins 管道 - 但 Jenkins 似乎只看到 'unsmudged' 文件 - 所有文件都包含 $Id$.

如何使 Jenkins 管道 运行 git 应用涂抹过滤器?

所以要解决上面的难题:

  • 首先,我检查了 docker 容器提供的脚本语言,该容器将 运行 我的 Jenkins pipeline/maven 构建,并决定使用 Python 2.7。
  • 我使用该语言编写了一个 smudge/clean 过滤器,它基本上扩展和减少了 $Id$ 标签,类似于 SVN 过去的做法。
  • 我声明 git 通过 .git 属性文件
  • 中的条目使用 'some' 过滤
  • 我配置了 git 以便 'some' 过滤实际上会分别以涂抹模式或干净模式调用我的脚本。此配置需要进入 .git/config 或通过 git 命令提出,并在 Jenkinsfile 中执行,就在再次检出文件之前。

这样 git 检查文件并在必要时 运行 使用污迹过滤器。另一个优点是,这种方式的污迹过滤器配置只发生在 docker container/linux 环境中。这意味着我和我在 Windows 环境中工作并且通常没有安装 python 的同事根本不必关心过滤 - 它既不会在那里配置也不会被调用。

归功于@phd。没有他的提示,我不可能破解这个坚果。