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
}
我有一个分布式 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
}