web-dev-qa-db-ja.com

失敗の原因となるJenkinsワークフロー環境変数

この非常に単純なワークフローの場合:

env.FOO = 42
node {
  sh "echo $FOO"
}

次のエラーが発生します。

Running: End of Workflow
groovy.lang.MissingPropertyException: No such property: FOO for class: WorkflowScript

ワークフローシェルステップで環境変数にアクセスするにはどうすればよいですか?

7
Michael Neale

補間を混合する必要があるという問題がありました。スクリプトの一部が前に補間され、スクリプトの一部が中に補間される場合。実行中に補間する変数をバックスラッシュでエスケープするための秘訣:

def FOO = 42

node {
  sh """
    BAR = "hello $FOO"
    echo \$BAR
  """
}

したがって、$ FOOはスクリプトの実行前に展開され、\ $ BARはスクリプトの実行中に展開されます。

7
Dennis Hoer

その理由は、二重引用符を使用すると、Groovyの文字列補間が開始され、FOOのワークフロースコープ変数が検索されるためです。

修正するには、一重引用符を使用します。

sh 'echo $FOO'

また、二重引用符を使用してスクリプトでワークフロー変数を使用できることにも注意してください。

def FOO = 43

node {
  sh "echo $FOO"
}

これにより、$FOObeforeスクリプトが実行される値が展開されます。

5
Michael Neale