如何在jenkins管道脚本中的目录中列出所有目录

时间:2019-04-29 11:52:15

标签: jenkins jenkins-pipeline jenkins-plugins

我想从jenkins管道脚本中获取特定目录中的所有目录。

我们该怎么做?

5 个答案:

答案 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

            }
        }
    }
  }