【问题标题】:How to read subfolders in jenkins pipeline如何读取詹金斯管道中的子文件夹
【发布时间】:2017-01-12 18:28:36
【问题描述】:

我正在尝试编写一个管道 jenkins 作业,该作业循环遍历特定目录的子文件夹并启动某些东西。问题是访问文件系统。由于某种原因,它似乎根本不读取文件系统,也不读取它自己的工作区。

这是我正在使用的 sn-p

node ('label') {
    workspacePath = '/opt/installersWS'
    ws(workspacePath){
        stage ("test"){
            ...some stuff...
            runtimeBuildDir = new File(workspacePath + "/components")
            echo runtimeBuildDir.getPath()
            if (runtimeBuildDir.exists()){
                echo "search for subfolders"
            } else {
                echo "main folder not existing"
            }

        }
    }
}

该文件夹当然存在于服务器上,但运行总是返回第二个回显。

更新: 我发现以这种方式给出的所有 gradle/java 指令都不是针对节点,而是在主节点上运行。这就是我没有找到目录的原因。所以我完全误解了管道是如何工作的。

说过..关于如何检索它的任何想法?例如,有没有办法从 shell 步骤设置 gradle 属性?

谢谢, 米歇尔

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    这是我解决它的方法,运行一个返回输出的 shell

    def subfolders = sh(returnStdout: true, script: 'ls -d RuntimeBuild/*').trim().split(System.getProperty("line.separator"))
    

    然后我就可以用目录名称来循环列表并对其进行操作。

    对于可能变成的 Windows:

    def subfolders = bat(script: '@dir /B RuntimeBuild', returnStdout: true).split(/\n\r/)
    

    【讨论】:

    • 请注意,System.getProperty("line.separator") 在与构建代理不同的操作系统上运行 Jenkins 主服务器时将不起作用,因为它将返回运行在 Jenkins 主服务器上的操作系统的行分隔符。另外我想在沙箱中运行时将无法使用它。但是用 \n 替换它应该可以在 linux 构建代理上解决问题。
    【解决方案2】:

    下面解决了我的问题。它可以帮助正在寻找相同的人。 可以使用返回管道中目录列表的函数将子文件夹添加到列表中,如下所示。

    @NonCPS
    def readDir()
    {
        def  dirsl = [] 
        new File("${workspace}").eachDir()
        {
            dirs -> println dirs.getName() 
            if (!dirs.getName().startsWith('.')) {
                dirsl.add(dirs.getName())
            }
        }
        dirsl
    }
    

    然后在您的管道脚本中,调用如下所示的函数并执行所需的任何操作。

    stage ('Build'){
    
        dirsl = readDir()
        def size = dirsl.size()
        print size
        for ( int i = 0; i < size; i++) {
            "Do whatever appropriate"
        }
    }
    

    【讨论】:

    • new File("${workspace}") 有点多余:写起来更简单new File(workspace)
    • 这仅在您在 Jenkins 主机(作为构建代理)上运行它的情况下才有效 - 或者我错过了什么?
    • 验证在非主节点上失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2017-09-06
    • 2019-01-09
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多