2016-08-25 11 views
2

テンプレートファイル(XMLファイルなど)を扱うパイプラインジョブがあり、レンダリングされたファイルを使用する前にファイルの変数をジョブパラメータで置き換える必要があります。それを行うために何かクリーンなものが見つかるようですが、今はシェルスクリプトとsedを使って各変数を一つずつ置き換えています。Jenkins pipeline:変数付きファイルのテンプレート化

<?xml version='1.0' encoding='UTF-8'?> 
<rootNode> 
    <properties> 
     <property1>${property1}</property1> 
     <property2>${property2}</property2> 
     <property3>${property3}</property3> 
    </properties> 
</rootNode> 

私は私のテンプレート・ファイル内の「変数」は私の仕事のパラメータ$property1$property2$property3に置き換えることがしたいと思います:ここで

は、例えば、XMLテンプレートファイルです。

sh "sed -i 's/@[email protected]/${property1}/' '${templateFile}'" + 
    "sed -i 's/@[email protected]/${property2}/' '${templateFile}'" + 
    "sed -i 's/@[email protected]/${property3}/' '${templateFile}'" 

...しかし、私はそれが非常に醜い見つける...など何Jinja2(または任意のテンプレートフレームワーク)などのファイルをテンプレート化のためのジェンキンスさんに何かがあるだろう。ここに は、私が今日やっているのですか?

答えて

0

XMLファイルのために必要なものがあれば、Jenkinsのconfig-file-providerプラグインは正常に動作しますが、私の用途には制限があります。これは、テンプレートファイルを集中的に格納する(またはファイルシステム内のファイルを指す)ことができ、オプションでトークンを置き換えることもできます。ただし、トークン・オプションは、トークンの全部または一部をターゲットにしています(また、$ {VAR}または$ VARの形式でトークンを探すためにハードコードされています)。あなたのトークンがすべてゲンキン環境で利用可能なら、あなたはうまくいくでしょうが、もしあなたが何かカスタムを持っていれば、それは失敗を引き起こすでしょう。ですから、例えば:

This is my instruction file. This file is saved to ${BUILD_URL}/file.txt 

私はbashスクリプトを生成したい場合は、上記のが動作します....

VAR = ${BUILD_URL} 
echo $VAR 

それは、$ VARの値を見つけることができないので、これは失敗します。 $をエスケープすることは役に立たないので、私の場合は何をすべきか分かりません。

+0

'$'をエスケープしようとしましたか?echo $ {'$'} VAR'? – jayhendren

0

ここで私が見つけた解決策である:

resources/report.txt.groovy(これは私のテンプレートファイルです):

Hello from ${job}! 

vars/helpers.groovy:私は、次のファイルを持つグローバル共有ライブラリを作成し

import groovy.text.StreamingTemplateEngine 

def renderTemplate(input, variables) { 
    def engine = new StreamingTemplateEngine() 
    return engine.createTemplate(input).make(variables).toString() 
} 
は、

次に、私のパイプラインで、次のステップを追加しました:

variables = [ "job": currentBuild.rawBuild.getFullDisplayName() ] 
template = libraryResource('report.txt.groovy') 
output = helpers.renderTemplate(template, variables) 

は、これは以下の内容を含む、output変数に格納されている文字列を生成します。SIS Unix Automation Testing » myjob » masterは私のマルチブランチパイプラインジョブの完全な名前です

Hello from SIS Unix Automation Testing » myjob » master #29! 

もちろん、この変数の内容をファイルに書き出したり電子メールで送信したりするなど、任意の操作を行うことができます。xmlファイルテンプレートや、txtだけでなく任意のファイルタイプを使用できます。

このアプローチを使用するには、StreamingTemplateEngineの内部の一部がブロックされるため、サンドボックスまたは承認/ホワイトリストのスクリプトを無効にする必要があります。次のように

ストリーミングテンプレートエンジン用のテンプレート形式は次のとおりです。フォームのものは${variable}または$VARIABLEも同様に直接置き換えられてしまいますと<% %>/<%= %>構文は(ループなどやif文)スクリプトレットを埋め込むために使用することができます(同様のERBテンプレートへ)。 StreamingTemplateEngineのドキュメントはhereです。

関連する問題