【问题标题】:Jenkins Groovy Pipeline Get (Windows)User Folder Per NodeJenkins Groovy Pipeline 获取(Windows)每个节点的用户文件夹
【发布时间】:2021-11-09 11:31:12
【问题描述】:

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

【问题讨论】:

    标签: windows jenkins groovy pipeline


    【解决方案1】:

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

    我看到了两种解决方法:

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

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

    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
    }
    

    【讨论】:

    • 这就是我所怀疑和害怕的。我重写了它以使用在所有机器上都相同的静态路径。并使用 stash / unstash 将其放在该位置。
    猜你喜欢
    • 2016-10-07
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多