Jenkinsパイプラインファイルが機能しないGroovyでの文字列補間

user5544183

そのため、Jenkins Pipelineが提供するreadFileメソッドを使用してテキストファイル(JSON)を読み取るJenkinsPipelineがあります。テキストファイルapp.JSONには、Jenkinsパイプラインですでに定義されている複数の変数があります。

readFileはファイルを読み取り、文字列に変換しますが、これらの変数を補間しません。単純な文字列置換以外にこれらの変数を補間するための私のオプションは何ですか(これは避けたいです)

readJSONまたはJSONパーサーを使用できることはわかっていますが、出力を文字列で表示したいので、文字列として読み取って渡すだけで簡単にできます。

Gstrings、$ {-> variable}、および.toString()メソッドを使用してみました。何もうまくいきませんでした。

Jenkinsパイプラインコード

appServerName = 'gaga'
def appMachine = readFile file: 'util-silo-create-v2/app.json'
println appMachine

app.json

{
   "name":"${appServerName}",
   "fqdn":"${appServerName}"
}

パイプラインとapp.jsonの両方に、置換したい変数が複数あります

問題は、JenkinsPipelineが提供するreadFileメソッドにあります。非常にすっきりと使いやすいですが、文字列を補間しません。

私は以下の出力を期待しています

println appMachine

{
   "name":"gaga",
   "fqdn":"gaga"
}

私が得ている出力

{
   "name":"${appServerName}",
   "fqdn":"${appServerName}"
}
Szymon Stepniak

readFileステップ(またはテキストファイルからコンテンツを読み取る他のメソッド)が現在のスコープから変数をバインドし、生のテキストの変数プレースホルダーを補間する必要があるというあなたの仮定は間違っています。ただし、Groovyテンプレートエンジンを使用して、GString変数の補間に似たものを呼び出すことができます。次の例を考えてみましょう。

import groovy.text.SimpleTemplateEngine

def jsonText = '''{
   "name":"${appServerName}",
   "fqdn":"${appServerName}"
}'''

@NonCPS
def parseJsonWithVariables(String json, Map variables) {
    def template = new SimpleTemplateEngine()
    return template.createTemplate(json).make(variables.withDefault { it -> "\${$it}" }).toString()
}

node {
    stage("Test") {
        def parsed =  parseJsonWithVariables(jsonText, [
            appServerName: "gaga"
        ])

        echo parsed
    }
}

このメソッドparseJsonWithVariablesは、期待どおりの動作をします。を使用し作成されたマップだけでなく、もシリアル化できない@NonCPSため、このメソッドを作成することが重要です。以前にファイルから読み取ったJSON(この例では、簡単にするために代わりに変数を使用します)とパラメーターのマップを取ります。このマップをデフォルト値のマップに変換するため(パーツがその責任を負います)、テンプレートエンジンは、指定された名前のプロパティがないと文句を言いません。この場合、デフォルトのメソッドは変数を「現状のまま」返しますが、代わりに空の文字列または値を返すことができますあなたのためにうまくいくものは何でも。SimpleTemplateEnginewithDefault()variables.withDefault { ... }null

それを実行すると、次のようになります。

[Pipeline] Start of Pipeline (hide)
[Pipeline] node
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] echo
{
   "name":"gaga",
   "fqdn":"gaga"
}
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

補間パイプが大文字の角度で機能しない

分類Dev

スタイルプロパティ内の角度文字列補間が機能しない

分類Dev

ファイアストア更新機能内で文字列補間形式が機能しない

分類Dev

awkregxがファイルの文字列で機能しない

分類Dev

Web.config変数の更新がAzureDevOpsパイプラインで機能しない(ファイル変換)

分類Dev

groovyのマップのリストが機能しないJenkinsパイプライン選択入力

分類Dev

インクルードファイルから呼び出されたときにRuby文字列補間が機能しない

分類Dev

Jquery イベント ハンドラーの文字列補間が機能しない

分類Dev

C#マルチラインコード文字列補間が機能しない

分類Dev

ファイルのプリコンパイルが正常に機能しない

分類Dev

ファイルプラグインがPhoneGapビルドで機能しない

分類Dev

Jenkins並列パイプラインが期待どおりに機能しない

分類Dev

Jenkinsパイプラインshreturnstdoutが機能しない

分類Dev

JavascriptMochaが2つのファイル間で機能しない

分類Dev

PowershellHere-文字列の改行が出力ファイルで機能しない

分類Dev

Jenkinsパイプライン内のDocker内のGitが機能しない

分類Dev

Jenkinsパイプラインで資格情報が機能しない

分類Dev

fileExistsが$ {variant}で機能しないjenkinsパイプラインに存在する

分類Dev

Jenkins パイプラインでの外部 Groovy ファイルの使用

分類Dev

JenkinsパイプラインでのGroovy文字列の比較

分類Dev

Meteorブートストラップの少ないミックスインがファイル間で機能しない

分類Dev

CoreRTでコンパイルされたプログラムがZIPファイルで機能しないのはなぜですか?

分類Dev

ngビルドコマンドがjenkinsパイプラインで機能しない

分類Dev

ファイル相対パスへのcronパイプが機能しない

分類Dev

Jenkins変数がパイプラインのsedコマンドで機能しない

分類Dev

Python 3.6では、文字列リテラル(同じ引用符タイプを使用)が補間された文字列内で機能しないのはなぜですか?

分類Dev

JsonファイルがVisualStudioCodeのCプログラムで機能しない

分類Dev

自動マッパープロファイルがAPIコントローラーで機能しない

分類Dev

Jenkinsパイプラインスクリプトでelseステートメントが正しく機能しない場合(groovy)

Related 関連記事

  1. 1

    補間パイプが大文字の角度で機能しない

  2. 2

    スタイルプロパティ内の角度文字列補間が機能しない

  3. 3

    ファイアストア更新機能内で文字列補間形式が機能しない

  4. 4

    awkregxがファイルの文字列で機能しない

  5. 5

    Web.config変数の更新がAzureDevOpsパイプラインで機能しない(ファイル変換)

  6. 6

    groovyのマップのリストが機能しないJenkinsパイプライン選択入力

  7. 7

    インクルードファイルから呼び出されたときにRuby文字列補間が機能しない

  8. 8

    Jquery イベント ハンドラーの文字列補間が機能しない

  9. 9

    C#マルチラインコード文字列補間が機能しない

  10. 10

    ファイルのプリコンパイルが正常に機能しない

  11. 11

    ファイルプラグインがPhoneGapビルドで機能しない

  12. 12

    Jenkins並列パイプラインが期待どおりに機能しない

  13. 13

    Jenkinsパイプラインshreturnstdoutが機能しない

  14. 14

    JavascriptMochaが2つのファイル間で機能しない

  15. 15

    PowershellHere-文字列の改行が出力ファイルで機能しない

  16. 16

    Jenkinsパイプライン内のDocker内のGitが機能しない

  17. 17

    Jenkinsパイプラインで資格情報が機能しない

  18. 18

    fileExistsが$ {variant}で機能しないjenkinsパイプラインに存在する

  19. 19

    Jenkins パイプラインでの外部 Groovy ファイルの使用

  20. 20

    JenkinsパイプラインでのGroovy文字列の比較

  21. 21

    Meteorブートストラップの少ないミックスインがファイル間で機能しない

  22. 22

    CoreRTでコンパイルされたプログラムがZIPファイルで機能しないのはなぜですか?

  23. 23

    ngビルドコマンドがjenkinsパイプラインで機能しない

  24. 24

    ファイル相対パスへのcronパイプが機能しない

  25. 25

    Jenkins変数がパイプラインのsedコマンドで機能しない

  26. 26

    Python 3.6では、文字列リテラル(同じ引用符タイプを使用)が補間された文字列内で機能しないのはなぜですか?

  27. 27

    JsonファイルがVisualStudioCodeのCプログラムで機能しない

  28. 28

    自動マッパープロファイルがAPIコントローラーで機能しない

  29. 29

    Jenkinsパイプラインスクリプトでelseステートメントが正しく機能しない場合(groovy)

ホットタグ

アーカイブ