如何阅读jenkins管道中的子文件夹

时间:2017-01-12 18:28:37

标签: jenkins 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"
            }

        }
    }
}

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

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

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

谢谢, 米歇尔

2 个答案:

答案 0 :(得分:3)

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

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

然后我能够使用目录名称来清点列表并操纵它们。

答案 1 :(得分: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"
    }
}