2017-03-02 19 views
6

バージョン2.32.2のパイプラインでJenkinsfileを使用しています。Jenkinsパイプラインshがシェルコマンドのパイプを尊重していないようです

さまざまな理由から、pomからバージョン文字列を抽出したいと考えています。私はmavenのヘルププラグインを追加して評価する必要はないと思っていました。

パイプを使用してpomから取り出して、実行ファイルのjenkinsワークスペースのコマンドラインで動作させるために、すぐに少しsed式が出てきました。

$ sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g' 1.0.0-SNAPSHOT

それはおそらく、最適化することができますが、私はパイプラインがパイプで連結されたSHコマンドに失敗しているように見える理由を理解したいです。私はいろいろな文字列形式で演奏しており、現在はドルのスラッシュ文字列を使用しています。コマンド文字列を簡単に出力可能にするために、次のように

パイプラインステップが見えます:私はそれがにパイプされたコマンドを分離しているように見える次のコンソール出力を得るジェンキンスパイプラインで実行

script { 
    def ver_script = $/sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'/$ 
    echo "${ver_script}" 
    POM_VERSION = sh(script: "${ver_script}", returnStdout: true) 
    echo "${POM_VERSION}" 
} 

別のコマンド:

[Pipeline] script 
[Pipeline] { 
[Pipeline] echo 
sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g' 
[Pipeline] sh 
[FRA-198-versioned-artifacts-44SD6DBQOGOI54UEF7NYE4ECARE7RMF7VQYXDPBVFOHS5CMSTFLA] Running shell script 
+ sed -n /<version>/,/<version/p pom.xml 
+ head -1 
+ sed s/[[:blank:]]*<\/*version>//g 
sed: couldn't write 89 items to stdout: Broken pipe 
[Pipeline] } 
[Pipeline] // script 

そこに適切jenkinsfileにパイプされたコマンドを使用する方法上の任意のガイダンス?

答えて

4

最後に、パイプサブシェルが問題の原因になっていると考えました。私はevalのの悪のいくつかを知っているが、私はevalの中でこれをwrappping終わった:

script { 
    def ver_script = $/eval "sed -n '/<version>/,/<version/p' pom.xml | head -1 | sed 's/[[:blank:]]*<\/*version>//g'"/$ 
    echo "${ver_script}" 
    POM_VERSION = sh(script: "${ver_script}", returnStdout: true) 
    echo "${POM_VERSION}" 
} 
0

あなたが簡単な方法をしたい場合、私はまた、私のジェンキンスパイプラインの内側が、サイドノートとして、パイプの使用に苦しんでいますMavenのPOMのバージョンを抽出するために、ここで私は別のポストで見つかった非常にきれいな1だと私が使用していること:

stage('Preparation') { 
version = getVersion() 
print "version : " + version 
} 
def getVersion() { 
    def matcher = readFile('pom.xml') =~ '<version>(.+)</version>' 
    matcher ? matcher[0][1] : null 
} 

ことはあなたが与える:

[Pipeline] echo 
releaseVersion : 0.1.24 
[Pipeline] sh 
+0

このようなことはもう必要ありません。 'readMavenPom'ステップを使って私の答えを見てください。 – StephenKing

+0

素晴らしい!私はすぐにそれを使用します。おかげで – mattvbv

0

pipeline-utility-stepsプラグインnowadayをsにはreadMavenPomステップが含まれており、次のようにバージョンにアクセスできます。

version = readMavenPom.getVersion() 
+0

最終的な目標を達成するためのおかげで、素晴らしいポインタが、私は一般的にshのステップでパイプの動作について興味があった。私は、サブ砲撃について考えてみてください、私はドキュメントで言及したか、または迅速かつ汚れた足踏みをしようとするとすぐに私に起こったことは考えていませんでした。 – sporkthrower

関連する問題