2017-12-01 8 views
1

私はCIパイプラインを実行するためにJenkinsfileを設定しようとしています。手順の1つは、ディレクトリツリー全体からファイルを収集し、1つのディレクトリにコピーして圧縮することです。Jenkinsfile sh(シェル)のステップのグロブパターン

私はJenkinsのshステップを使用してglobパターンを使用してこれを実行しようとしていますが、これを動作させることはできません。

簡単な例Jenkinsfileは、次のようになります

[Pipeline] } 
[Pipeline] // stage 
[Pipeline] withEnv 
[Pipeline] { 
[Pipeline] stage 
[Pipeline] { (List with Glob) 
[Pipeline] sh 
[jenkinsfile-pipeline] Running shell script 
+ ls '**/*.xml' 
ls: cannot access **/*.xml: No such file or directory 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] } 
[Pipeline] // withEnv 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
ERROR: script returned exit code 2 
Finished: FAILURE 

私は」だと思う:私はワークスペース内の任意の.xmlファイルを一覧表示することを期待するが、代わりに私が受け取る

pipeline { 
    agent any 
    stages { 
     stage('List with Glob'){ 
      steps{ 
       sh 'ls **/*.xml' 
      } 
     } 
    } 
} 

Groovyの文字列補間で何か不足していますが、私はこの特定のケース(Jenkinsfile経由のJenkinsパイプラインで実行中)のためにいくつかの助けが必要です

ご迷惑をおかけして申し訳ありません。

+0

は、あなたが期待するよりも、使用されている別のシェルのだろう、私はデフォルトでsh' 'ですべてがBourneシェル(ない' bash')によって実行されると信じています。 – mkobit

+0

あなたが正しいと思います。私は 'zsh'を使用しています。これは箱の外でこれをサポートしているようですが、以下の答えはこれが有効なグロブパターンではないことを知らせてくれました。ありがとう –

答えて

2

私が言うことができる限り、**/*.xml'は有効なグロブパターン(see this)ではありません。代わりにあなたが持っているものは、私が知っている限り、bash(またはsh)によってサポートされていない蝶番naming patternです。代わりに何をするwan'tことuse findにある:

pipeline { 
    agent any 
    stages { 
     stage('List with find'){ 
      steps{ 
       sh "find . -type f -name '*.xml'" 
      } 
     } 
    } 
} 
+1

こんにちは、ありがとう。私の質問の下のコメントは、私は 'zsh'を使っていましたが、それがボックスからの再帰的マッチングのためのglobstarをサポートしていることを認識しませんでした。あなたの答えは素晴らしいです、私は 'find'と' -exec'を使ってファイルを必要な場所にコピーしています。 –

関連する問題