web-dev-qa-db-ja.com

Jenkins Pipelineのワークスペース上のファイルを一覧表示する

Jenkins Pipelineのワークスペースにファイルを一覧表示しようとしています。これを使用して、適切な並列タスクを生成できます。

単純に_sh ls > files_を使用してそれを読み取ることもできますが、Fileオブジェクトが必要であり、より複雑なロジックでさらにフィルタリングできます。実際、Files.listFiles(FileFilter)が理想的です。

ただし、ファイルのリストをまったく取得できません。まず、ビルドの現在の作業ディレクトリを簡単に見つけるために、奇妙なものに頼らなければなりませんでした。

_sh 'pwd > workspace'
workspace = readFile('workspace').trim()
_

次に、これを呼び出してファイルのリストを取得します。

_@NonCPS
def getFiles(String baseDir) {
    Arrays.asList(new File(baseDir).listFiles())
}
_

そして、asListでNPEを取得します。これは、javadocを読んだ結果、new File(baseDir)が存在しない(またはディレクトリではない)ことを意味します。

_@NonCPS_というタグを付けています。これは、Pipelineでのグルーヴィーなクロージャーに必要なためです。これは、完全なJava <1.8構文よりも使用したいのです。

15

Pwdの場合、 pwd stepを使用できます。

メインワークスペースディレクトリ内のファイルのリストについては、 findFiles を使用できます。

files = findFiles(glob: '*.*')
23

処理用のプロジェクトでjsonファイルを見つける方法の例を次に示します。

sh "ls *.json > listJsonFiles"
def files = readFile( "listJsonFiles" ).split( "\\r?\\n" );
sh "rm -f listJsonFiles"
  • Lsを使用してファイルを見つけ、別の一時ファイルに書き込みます
  • 一時ファイルを読み取り、新しい行で分割して配列を作成します
  • 一時ファイルを削除する
6
vanappears

JENKINS関数を使用せずにすべてのケースで機能するソリューション

def  FILES_LIST = sh (script: "ls   '${workers_dir}'", returnStdout: true).trim()
//DEBUG
echo "FILES_LIST : ${FILES_LIST}"
//PARSING
for(String ele : FILES_LIST.split("\\r?\\n")){ 
   println ">>>${ele}<<<"     
}
3

マスターでスクリプトを実行している場合、pwd()を使用する次の方法を試すことができます。

 sh "ls -la ${pwd()}"
1
f-society

これは私にとっては最も簡単で簡単なグルーヴィーなソリューションです。

def fileList = "ls /path/to/dir".execute()
def files= []
fileList .text.eachLine {files.add(it)}
return files
0
Venkat Madhav

これは私のために働いた!!

node("aSlave") {
    def files = getAllFiles(createFilePath("${workspace}/path_to_directory_in_workspace"))
}


@NonCPS
def getAllFiles(rootPath) {
    def list = []
    for (subPath in rootPath.list()) {
        list << subPath.getName()
        // in case you don't want extension
        // list << FilenameUtils.removeExtension(subPath.getName())
    }
    return list
}

// Helps if slave servers are in picture
def createFilePath(def path) {
    if (env['NODE_NAME'].equals("master")) {
        File localPath = new File(path)
        return new hudson.FilePath(localPath);
    } else {
        return new hudson.FilePath(Jenkins.getInstance().getComputer(env['NODE_NAME']).getChannel(), path);
    }
}
0
Litty Philip