如何“缩短”Jenkins Pipeline输出路径

6

直到最近,我们在Jenkins中没有使用任何“Pipeline”来构建我们的解决方案,因此我目前正在将我们的构建移动到多分支管道。

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

目前,Jenkins管道将所有内容提取到一个看起来像这样的文件夹中:

D:\ws\ght-build_feature_pipelines-TMQ33LB5OQIQ5VXVMFKFDG2HWCD4MUOGEGUWJUOMZ5D2GI42BIQA

这非常长,现在我们达到了MSBuild的260个字符限制:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2991,5): error 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.aaaaaaaaaa.yyy.bbbbbb.dddddddddddddd.yyyyyyy.vvv\xx.aaaaaaaaaa.yyy.bbbbbb.dddddddddddddd.yyyyyyy.vvv.csproj]

我们有很多情况需要处理长路径名,因此重构所有内容是一项艰巨的工作,因此我正在寻找如何指定更短的路径给Jenkins?

2个回答

5
我的最终做法是:
pipeline {
    agent {
        node{
            label 'windows-node'
            customWorkspace "D:\\ws\\${env.BRANCH_NAME}"            
        }
    }
    options{
        skipDefaultCheckout()
    }
...
}

我有一个执行结账的步骤。对我来说,采用“每个任务”行为更容易,而不用触及Jenkins全局设置。


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

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

jenkins.branch.WorkspaceLocatorImpl.MAX_LENGTH=40

针对旧版Jenkins

实际上,有一个Java属性可以设置目录名称的长度,例如:

-Djenkins.branch.WorkspaceLocatorImpl.PATH_MAX=20

要使其永久生效,您需要在Jenkins java启动配置文件中指定此属性。
您也可以使用Jenkins脚本控制台读取和写入此属性以进行临时更改或仅尝试它,因为它会立即生效,例如:
println jenkins.branch.WorkspaceLocatorImpl.PATH_MAX
jenkins.branch.WorkspaceLocatorImpl.PATH_MAX = 20
println jenkins.branch.WorkspaceLocatorImpl.PATH_MAX

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

详细信息请参见:
https://issues.jenkins-ci.org/browse/JENKINS-34564
https://issues.jenkins-ci.org/browse/JENKINS-38706


这会影响服务器上的其他作业吗? - J4N
它将更改所有多分支作业的路径,但不会影响其他作业(自由风格和普通管道)。 - Joerg S
好的,只是为了我的理解,这个路径会包括基础工作区吗?(对我们来说是D:\ ws)还是只有“生成”的部分? - J4N
这是生成的部分。也许你应该简要地检查一下链接,里面有关于这个设置的更多提示。 - Joerg S
Joerg,第二个方法可行,但是第一个方法可能我没有理解。我尝试像这样初始化jenkins: java -jar jenkins.war -Djenkins.branch.WorkspaceLocatorImpl.PATH_MAX=20 这就是我应该做的吗? - Diogo Neves
1
@DiogoNeves:抱歉回复晚了,我们花了一段时间才找到确切的设置。现在我可以确认,我们在Jenkins命令行上使用以下内容:-Djenkins.branch.WorkspaceLocatorImpl.PATH_MAX=20 - Joerg S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接