私の宣言的なJenkinsfileでは、いくつかの値を計算し、それらをmavenに渡そうとしています。それは簡単なように、私はそれを動作させることはできません。宣言的なJenkinsfileの動的変数はNPEにつながります
ここに私のJenkinsfileの関連部分です:
def port = 1000 as Integer
def mocksport = 0 as Integer
def safebranch='unknown'
pipeline {
stages {
stage('Compile'){
steps {
script {
safebranch=env.BRANCH_NAME.toLowerCase().replaceAll("[-_/]", "");
for (int i=0; i<safebranch.length(); i++) {
port = (port as Integer) + (Character.getNumericValue(safebranch.charAt(i)) as Integer);
}
port = (port as Integer) % 99 + 9000;
mocksport = (port as Integer) + 1;
echo "Application will be deployed on port ${port}"
echo "Mocks will be deployed on port ${mocksport}"
}
sh "mvn clean install -Dmaven.test.failure.ignore=true -T 1C -Drancher.port=${port} -Drancher.mocks.port=${mocksport} -Drancher.tag=${safebranch}"
}
}
} // stages
} // pipeline
このバージョンでは、私は実用的なソリューションを得ることができる最も近いです。少なくとも、スクリプトブロックが実行され、エコーの値が正しいです:ログに私が参照してください。私は今、この例外を取得しています
[Pipeline] [Compile] echo
[Compile] Application will be deployed on port 9065
[Pipeline] [Compile] echo
[Compile] Mocks will be deployed on port 9066
、おそらくスクリプトブロックのコンテキストの外で変数を見つけることができないGROOVYに関連します:
java.lang.NullPointerException: Cannot get property '' on null object
at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60)
at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:174)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:456)
at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:284)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:286)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
パイプライン直下のグローバル環境セクションで変数を宣言し、 "env"を使用してそれらにアクセスしようとしました。この場合、スクリプトブロックは値を更新できないようです(=私はエコーの結果として1000と0を取得します)。
どうすればこの作品を作成できますか?
ボーナス質問:不思議なことに、変数は常に文字列として扱われるようです。変数を使用するたびにIntegerにキャストを追加しないと、機能しません(ポート変数は各繰り返しで拡張されます:1000、10001012、100010122343など)。変数を宣言して整数として使用できますか?
私はあなたのバージョンを取り、徐々になど、すべての私の他のステップ、並列ブロックを、再度追加...そして今、それは働きます! :)何が問題を引き起こしていたのかは分かりませんが、あなたの書き直しはそれを修正しました。どうもありがとう。 – lbndev