我试图编写一个管道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属性?例如?
谢谢, 米歇尔
答案 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"
}
}