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

问题描述 投票:0回答:4

这是在我更新了一些插件并向我们的 Jenkins 添加“蓝海”之后发生的。

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

但是我们正在 git 中从

workspace@script
文件夹加载一些常规文件,所以这就是我所做的 :

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:

添加了对最后修改的文件夹的检索,以防该文件夹名称将来发生更改。

jenkins jenkins-pipeline jenkins-groovy
4个回答
3
投票

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

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

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

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


0
投票

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

为什么 jenkinsfile 中的脚本无法从自己的结帐访问其他文件(如果未启用“轻量级结帐”)?

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

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


0
投票

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

我们正在使用 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

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


0
投票

两年后,我也偶然发现了这个问题。与 HG Mercurial 一起。 在使用 Jenkinsfile 而不是管道定义中的代码后,Jenkins 开始使用

[项目]@script/[随机64个字符文件夹]/...

结帐路径。对于某些文件,我超过了 260 个字符长度,并且结账时出现错误。启用 Windows 扩展路径长度或更改 Jenkins xml 变量并没有解决问题。

所以这是我的简单解决方法:

在管道配置中,转到高级和子目录。现在输入

..\[您的文件夹名称]

这将检出存储库到

[项目]@script/[您的文件夹名称]/...

© www.soinside.com 2019 - 2024. All rights reserved.