如何“减少”Jenkins Pipeline 输出路径

J4N*_*J4N 6 jenkins jenkins-pipeline

直到最近,我们才在 Jenkins 中构建没有任何“管道”的解决方案,所以我目前正在将我们的构建移动到多分支管道。

我遇到的问题是我们的解决方案有很多结构(很多子文件夹,有时还有一些大牌)。

目前,詹金斯管道提取文件夹中的所有内容,如下所示:

D:\ws\ght-build_feature_pipelines-TMQ33LB5OQIQ5VXVMFKFDG2HWCD4MUOGEGUWJUOMZ5D2GI42BIQA

这是很长的,现在我们达到了 260 个字符的限制MSBuild

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2991,5):错误 MSB3553:资源文件“obj\Release\xx.aaaaaaaaaa。 yyy.bbbbbb.dddddddddddddd.yyyyyyy.vvv.dddddddddd.Resources.resources”的名称无效。项目元数据“%(FullPath)”不能应用于路径“obj\Release\xx.aaaaaaaaaa.yyy.bbbbbb.dddddddddddddd.yyyyyyy.vvv.dddddddddd.Resources.resources”。指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。[D:\ws\ght-build_feature_pipelines-TMQ33LB5OQIQ5VXVMFKFDG2HWCD4MUOGEGUWJUOMZ5D2GI42BIQA\Src\bbbbbb\dddddd\dddddddddddddd\yyyyyyy\xx.adaddadddddbbbb.ydyddddddbbbb.

我们有太多长度很大的情况,以至于重构所有内容确实是一项艰巨的工作,所以我正在研究如何为 jenkins 指定一条更小的路径?

J4N*_*J4N 5

我最终做了什么:

pipeline {
    agent {
        node{
            label 'windows-node'
            customWorkspace "D:\\ws\\${env.BRANCH_NAME}"            
        }
    }
    options{
        skipDefaultCheckout()
    }
...
}
Run Code Online (Sandbox Code Playgroud)

我有一个步骤可以结帐。对我来说,在不触及 jenkins 全局设置的情况下更容易拥有“每个工作”的行为。


Joe*_*g S 4

更新(对于任何最近的 Jenkins 实例)

事实证明,最近的 Jenkins 版本PATH_MAX似乎被忽略了。它唯一做的事情是:当小于某个值时,在 Jenkins 日志中发出警告,这实际上并不重要 - 因为设置本身无论如何都会被忽略(如 Jenkins 2.249.3 所示)。另请参阅:JENKINS-2111

据我所知 - jenkins-branch-api 2.0.21中引入了新设置:

引入了一个新属性:MAX_LENGTH。默认情况下,该值默认为 32 个字符。

您可以像这样设置它PATH_MAX

作为 java 属性 - 确保 Jenkins 将开始使用正确的设置,例如:

-Djenkins.branch.WorkspaceLocatorImpl.MAX_LENGTH=40
Run Code Online (Sandbox Code Playgroud)

或者在运行时,使用脚本控制台:

jenkins.branch.WorkspaceLocatorImpl.MAX_LENGTH=40
Run Code Online (Sandbox Code Playgroud)

对于较旧的 Jenkins 实例

实际上,您可以设置一个 java 属性来指定目录名称的长度,例如:

-Djenkins.branch.WorkspaceLocatorImpl.PATH_MAX=20
Run Code Online (Sandbox Code Playgroud)

要使其永久生效,您必须在 Jenkins java 启动配置文件中指定此属性。

您还可以使用 Jenkins 脚本控制台读取和写入此属性以进行临时更改,或者尝试一下,因为它会立即生效,例如

println jenkins.branch.WorkspaceLocatorImpl.PATH_MAX
jenkins.branch.WorkspaceLocatorImpl.PATH_MAX = 20
println jenkins.branch.WorkspaceLocatorImpl.PATH_MAX
Run Code Online (Sandbox Code Playgroud)

将此值设置为 0 会更改路径生成行为。

有关详细信息,请查看:
https://issues.jenkins-ci.org/browse/JENKINS-34564
https://issues.jenkins-ci.org/browse/JENKINS-38706