为什么 Jenkins 在 workspace@script 文件夹中创建一个子文件夹来检出 git 代码而不是 workspace@script 本身?

Why does Jenkins creates a subfolder within the workspace@script folder to checkout git code instead of the workspace@script itself?

这是在我更新了一些插件并将 'blue ocean' 添加到我们的 Jenkins 之后发生的。

我们的每项工作都在使用 JenkinsFile 来构建和打包我们的应用程序。

但是我们正在从 workspace@script 文件夹中的 git 中加载一些 groovy 文件,所以这就是我所做的:

script {
    slack = load WORKSPACE + "@script/jenkins/libs/toto.groovy"
}

但现在我必须这样做才能拥有正确的文件夹:

script {
    // Locate the jenkins folder
    // This is done because there is a new sub-folder (like : 17a4ba1ed1ce777b18c5...)
    // that appeared out of nowhere (update -> security ??)
    git_jenkins_folder = sh (
        script: "find " + WORKSPACE + "@script -type d -name 'jenkins' -printf '%T@ %Tc %p\n' | sort -rn | head -1 | cut -d' ' -f9",
        returnStdout: true
    ).trim()
    // Load the groovy methods in groovy files
    slack = load git_jenkins_folder + "/libs/toto.groovy"
}

当然,我必须从 workspace@script 文件夹中删除之前签出的代码才能正常工作。

怎么突然就这样了?我在考虑安全更新吗?

如果以后这个数字发生变化,出现新的文件夹怎么办??

恕我直言,这真的很奇怪,但也许我错过了什么。如果有人知道答案,我会很乐意阅读:)

编辑:

感谢@1141514admin,这样做是为了解决 'Pipeline: Groovy' 插件的这些问题:

编辑 2:

添加了对上次修改的文件夹的检索,以防将来此文件夹名称发生变化。

我今天也在我的构建中注意到了这个新行为。我之前更新了一些插件。我发现在我的服务器上是 'Pipeline: Groovy' 插件,版本 2656.vf7a_e7b_75a_457 导致这些新的子文件夹具有冗长的随机名称,其中包含克隆的回购文件。对我来说,问题是它导致构建失败,导致文件路径超过 260 个字符,这是 Windows 中的默认限制。我将 'Pipeline: Groovy' 插件降级到版本 2648.va9433432b33c,在重新启动 Jenkins 服务后,我不再在工作区构建文件夹中看到这些新的 random-named 子文件夹。

听起来这是一个永久性的变化。

https://www.jenkins.io/security/advisory/2022-02-15/

管道:Groovy 插件 2656。vf7a_e7b_75a_457 在读取管道的脚本文件(通常是 Jenkinsfile)时,每个 SCM 使用不同的检查目录。

我遇到了同样的问题,对我来说,这似乎是这些安全修复程序产生的错误。还有一个问题:https://issues.jenkins.io/browse/JENKINS-67857

为什么 jenkinsfile 中的脚本不能从自己的签出访问其他文件(如果未启用“轻量级签出”)?

你上面的脚本是目前问题的解决方法,但如果开发人员决定将结帐移动到其他地方或限制对该“其他”工作区的访问,它并不能永久解决问题。

所以我认为解决方案是,该插件提供了一种访问结帐的官方方式。

我今天 运行 遇到了同样的问题。

我们正在使用 Mercurial (hg),与此功能相关的主要问题是无法检出 jenkinsfile,因为存储库中的某些文件路径现在超过了 windows 255 个字符的限制。

我们的修复是在 jenkins 节点上将 Win32LongFileNamesExtension 设置为 mercurial。

文档:https://www.mercurial-scm.org/wiki/Win32LongFileNamesExtension

源文件:https://foss.heptapod.net/mercurial/win32lfn/-/blob/branch/default/src/win32lfn.py

希望这可以帮助到任何人:)