我想从jenkins管道脚本中获取特定目录中的所有目录。
我们该怎么做?
答案 0 :(得分:6)
如果要列出特定目录下的所有目录,例如mydir
使用Jenkins Utility插件,您可以执行以下操作:
假设mydir
在当前目录下:
dir('mydir') {
def files = findFiles()
files.each{ f ->
if(f.directory) {
echo "This is directory: ${f.name} "
}
}
}
只需确保您不提供glob
选项。提供该功能可使findFiles
仅返回文件名。
更多信息:https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/
答案 1 :(得分:1)
我还没有尝试过,但是我会看一下Jenkins Pipeline Utility Steps Plugin提供的findFiles步骤,并将glob设置为一个蚂蚁风格的目录模式,例如'** / * /'
答案 2 :(得分:1)
如果您只想记录它们,请使用
sh("ls -A1 ${myDir}")
对于Linux / Unix。 (注意:这是一个大写字母A和数字1。)
或者,使用
bat("dir /B ${myDir}")
对于Windows。
如果要在变量中显示文件列表,则必须使用
def dirOutput = sh("ls -A1 ${myDir}", returnStdout: true)
或
def dirOutput = bat("dir /B ${myDir}", returnStdout: true)
然后解析输出。
答案 3 :(得分:0)
关于Jenkinsfile结束的建议:
post {
always {
echo '\n\n-----\nThis build process has ended.\n\nWorkspace Files:\n'
sh 'find ${WORKSPACE} -type d -print'
}
}
将find
放在您认为更好的地方。在here
答案 4 :(得分:0)
我没有找到任何列出文件夹的插件,因此我在管道中使用了sh / bat脚本,而且无论操作系统如何,它都可以正常工作。
pipeline {
stages {
stage('Find all fodlers from given folder') {
steps {
script {
def foldersList = []
def osName = isUnix() ? "UNIX" : "WINDOWS"
echo "osName: " + osName
echo ".... JENKINS_HOME: ${JENKINS_HOME}"
if(isUnix()) {
def output = sh returnStdout: true, script: "ls -l ${JENKINS_HOME} | grep ^d | awk '{print \$9}'"
foldersList = output.tokenize('\n').collect() { it }
} else {
def output = bat returnStdout: true, script: "dir \"${JENKINS_HOME}\" /b /A:D"
foldersList = output.tokenize('\n').collect() { it }
foldersList = foldersList.drop(2)
}
echo ".... " + foldersList
}
}
}
}