如何读取詹金斯管道中的子文件夹

How to read subfolders in jenkins pipeline

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

这是我正在使用的代码段

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"
            }

        }
    }
}

该文件夹当然存在于服务器上,但 运行 始终 return 具有第二个回显。

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

说.. 知道如何找回它吗?例如,有没有办法从 shell 步骤设置 gradle 属性?

谢谢, 米歇尔

我就是这样解决的,运行一个返回输出

的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/)

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

@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"
    }
}