Jenkins Groovy 管道获取 (Windows) 每个节点的用户文件夹

Jenkins Groovy Pipeline Get (Windows)User Folder Per Node

我有一个分布式 Jenkins 构建,jenkins 进程在从站上运行的用户不一定是静态的,所以我需要一种机制来获取每个节点的用户。

我正在尝试

#!/usr/bin/env groovy

class TestSettings {
    public static String NuGetPackagesPath = "${env.USERPROFILE}\.nuget\packages"
}

node("master"){
    println env.USERPROFILE // works as expected
    println TestSettings.NuGetPackagesPath // throws exception
}

node("build"){
    println env.USERPROFILE // works as expected
    println TestSettings.NuGetPackagesPath // throws exception
}

env在静态属性中不起作用,因为属性在你进入节点闭包之前就已经初始化了。所以 env 还没有。

我看到了两种解决方法:

  • 将 属性 转换为函数并将 env 变量作为参数传递。
  • 将其设为非静态函数并将 env 传递给 class 构造函数。

我可能会选择后者,因为当你有很多测试设置时它会更容易使用。

class TestSettings {
    public static String getNuGetPackagesPath( def env ) { "${env.USERPROFILE}\.nuget\packages" }
}

class TestSettings2 {
    def env = null
    
    TestSettings2( def env ) {
        this.env = env
    }
    
    public String getNuGetPackagesPath() { "${env.USERPROFILE}\.nuget\packages" }
}


node("master"){
    println env.USERPROFILE
    
    println TestSettings.getNuGetPackagesPath( env )
    
    def testSettings = new TestSettings2( env )
    // Note that we can use the method like a property!
    println testSettings.nuGetPackagesPath
}