0

宣言型ジェンキンパイプラインコードの1つのステージで、bashスクリプト(sh '''./a.sh'''、スクリプト "a.sh"そのスクリプトでは、 "jarVersion"の値が$ {WORKSPACE} /。jarVersion(echo "jarVersion=${jarVersion}" > ${WORKSPACE}/.jarVersion)に挿入されています。後の段階で、jarVersionの値を取得する必要があります。値を取得するには、load "${WORKSPACE}/.jarVersion"${jarVersion}を使用します。これはパイプラインスクリプトで動作するときに機能します。Jenkinsパイプラインでenv変数を正常にロードしましたが、パイプラインが共有ライブラリとして使用されていませんでした。

ただし、このパイプラインを共有ライブラリ(/vars/testSuite.groovyに入れる)として設定し、別のパイプラインスクリプトで呼び出します。 var ${jarVersion}は認識できません。

問題の解決方法を教えてください。一般的な質問は、スクリプトの値をステージAからステージBに転送する方法です。

stage('getJarVersion'){ 
     steps{ 
      script{ 
       load "${WORKSPACE}/.jarVersion" 
       currentBuild.description = "jarVersion:${jarVersion}" 
      } 
     } 
    } 

私はそれがパイプラインスクリプトであるとして、それは仕事ができると予想。

しかし、それは示しています。同じグルーヴィーなファイルの下の段階で

groovy.lang.MissingPropertyException: No such property: jarVersion for class: testSuite 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458) 
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:34) 
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20) 
    at testSuite.call(/jenkins/jobs/TestSuite1/builds/11/libs/pipelineUtilities/vars/testSuite.groovy:84) 

答えて

0

、あなたはステージのブロックのうち、ノードブロックの前にオブジェクトを宣言する必要があります。だから、それぞれのステージのために、あなたは、変数内の値を定義することができます。

Pipeline { 

def my_var 

stage('stage1'){ 
--------- 
} 

stage('stage2'){ 
--------- 
} 

} 

あなたはファイルごとに段階を定義している場合は、入力オブジェクトでクロージャを作成すると、親からの電話でそれを渡す必要がグルーヴィーなファイル:

test.groovy:

def call(def my_obj, String my_string) { 


    stage('my_stage') { 
    println(my_obj) 
    } 
} 

parent_test.groovy

test(obj_value,string_value) 
関連する問題