这是在我更新了一些插件并向我们的 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:
添加了对最后修改的文件夹的检索,以防该文件夹名称将来发生更改。
我今天也在我的构建中注意到了这种新行为。我之前更新了一些插件。我发现在我的服务器上,“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 使用不同的签出目录。
我有同样的问题,对我来说这似乎是这些安全修复程序产生的错误。还有一个问题: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
希望这可以帮助任何人:)
两年后,我也偶然发现了这个问题。与 HG Mercurial 一起。 在使用 Jenkinsfile 而不是管道定义中的代码后,Jenkins 开始使用
[项目]@script/[随机64个字符文件夹]/...
结帐路径。对于某些文件,我超过了 260 个字符长度,并且结账时出现错误。启用 Windows 扩展路径长度或更改 Jenkins xml 变量并没有解决问题。
所以这是我的简单解决方法:
在管道配置中,转到高级和子目录。现在输入
..\[您的文件夹名称]
这将检出存储库到
[项目]@script/[您的文件夹名称]/...