85

parameters「ワークフロー」Jenkins ジョブの「このビルドはパラメータ化されています」セクションのセットにどのようにアクセスしますか?

テストケース

  1. ワークフロー ジョブを作成します。
  2. 「このビルドはパラメーター化されています」を有効にします。
  3. fooデフォルト値の STRING PARAMETER を追加しますbar text
  4. 以下のコードを に追加しますWorkflow Script

    node()
    {
         print "DEBUG: parameter foo = ${env.foo}"
    }
    
  5. ジョブを実行します。

結果

DEBUG: parameter foo = null

4

10 に答える 10

98

Workflow プラグインを使用する場合、env を介してではなく、変数を直接使用できると思います。試す:

node()
{
    print "DEBUG: parameter foo = ${foo}"
}
于 2015-03-27T11:42:13.220 に答える
17

ビルド パラメーター foo を追加すると、「素の変数」のように機能するものに変換されるため、スクリプトでは次のようにします。

node {
   echo foo
}

ワークフロー スクリプトの実装を見ると、スクリプトが実行されると、WorkflowScript というクラスが動的に生成されることがわかります。スクリプト内のすべてのステートメントは、このクラスのコンテキストで実行されます。このスクリプトに渡されたすべてのビルド パラメータは、このクラスからアクセスできるプロパティに変換されます。

たとえば、次のことができます。

node {
    getProperty("foo")
}

興味がある方のために、ビルド パラメーター、環境変数、および WorkflowScript クラスのメソッドを出力しようとする、私が作成したワークフロー スクリプトを次に示します。

node {
   echo "I am a "+getClass().getName()

   echo "PARAMETERS"
   echo "=========="
   echo getBinding().getVariables().getClass().getName()
   def myvariables = getBinding().getVariables()
   for (v in myvariables) {
       echo "${v} " + myvariables.get(v)
   }
   echo STRING_PARAM1.getClass().getName()

   echo "METHODS"
   echo "======="
   def methods = getMetaClass().getMethods()

   for (method in methods) {
       echo method.getName()    
   } 

   echo "PROPERTIES"
   echo "=========="
   properties.each{ k, v -> 
       println "${k} ${v}" 
   }
   echo properties
   echo properties["class"].getName()

   echo "ENVIRONMENT VARIABLES"
   echo "======================"
   echo "env is " + env.getClass().getName()
   def envvars = env.getEnvironment()
   envvars.each{ k, v ->
        println "${k} ${v}"
   }
}

ビルド パラメーターが設定されているかどうかを確認するためにテストしたかった別のコード例を次に示します。

node {
   groovy.lang.Binding myBinding = getBinding()
   boolean mybool = myBinding.hasVariable("STRING_PARAM1")
   echo mybool.toString()
   if (mybool) {
       echo STRING_PARAM1
       echo getProperty("STRING_PARAM1")
   } else {
       echo "STRING_PARAM1 is not defined"
   }

   mybool = myBinding.hasVariable("DID_NOT_DEFINE_THIS")
   if (mybool) {
       echo DID_NOT_DEFINE_THIS
       echo getProperty("DID_NOT_DEFINE_THIS")
   } else {
       echo "DID_NOT_DEFINE_THIS is not defined"
   }
}
于 2015-12-29T22:29:15.743 に答える
0

パイプライン プラグインのチュートリアルに従って:

ビルド時にパラメーターを受け入れるようにパイプラインを構成している場合 (パラメーターを使用してビルド)、それらは同じ名前の Groovy 変数としてアクセスできます。

したがって、変数に直接アクセスしてみてください。たとえば、次のようになります。

node()
{
     print "DEBUG: parameter foo = " + foo
     print "DEBUG: parameter bar = ${bar}"
}
于 2016-10-19T21:44:02.400 に答える