web-dev-qa-db-ja.com

Jenkinsfileを使用してgroovy関数で環境変数を使用する方法

Jenkinsfileのノードの外部で定義された環境変数を使用しようとしています。関数内ではなく、任意のノードの任意のパイプラインステップでスコープに含めることができます。私が今考えることができる唯一の解決策は、それらをパラメーターとして渡すことです。しかし、関数内で直接env変数を参照したいので、あまり多くのパラメーターを渡す必要はありません。これが私のコードです。 BRANCH_TESTの正しい値を出力する関数を取得するにはどうすればよいですか?

   def BRANCH_TEST = "master"

   node {
       deploy()
   }

   def deploy(){
       echo BRANCH_TEST
   }

Jenkinsコンソール出力:

[Pipeline]
[Pipeline] echo
null
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
12
mdo123

ソリューションは

  1. @Fieldアノテーションを使用する

  2. Defを宣言から削除します。 defの使用に関する説明については、 テッドの回答 を参照してください。

解決策1(@Fieldを使用)

import groovy.transform.Field

@Field def BRANCH_TEST = "master"

   node {
       deploy()
   }

   def deploy(){
       echo BRANCH_TEST
   }

解決策2(defの削除)

BRANCH_TEST = "master"

   node {
       deploy()
   }

   def deploy(){
       echo BRANCH_TEST
   }

説明はこちら、

https://groups.google.com/d/msg/jenkinsci-users/P7VMQQuMdsY/bHfBDSn9GgAJ

how-do-i-create-and-access-the-global-variables-in-groovy

21
mdo123