レポートのビルド期間を取得しようとしていますが、常に0が返されます。
ドキュメントを読んだり、Slackプラグインのソースを調べたり、他のリソースを読んだりすることで、次のいずれかを実行できるはずです。
def duration = currentBuild.duration
def duration = currentBuild.durationString
def duration = currentBuild.durationString()
def duration = currentBuild.getDurationString()
どれも機能しません。私の理解では、これは、ビルドが実際に完了する前にこれを呼び出しているため、期間がまだ利用できないためである可能性があります。
パイプラインの構造は次のようになります。
node {
try {
stage("Stage 1"){}
stage("Stage 2"){}
} catch (e) {
currentBuild.result = "FAILED"
throw e
} finally {
notifyBuild(currentBuild.result)
}
}
def notifyBuild(String buildStatus = 'STARTED') {
def duration = currentBuild.duration;
}
私の質問は:
私の一時的な解決策は、以下を使用することです。
int jobDuration = (System.currentTimeMillis() - currentBuild.startTimeInMillis)/1000;
これは問題なく動作しますが、常に秒単位で時間を示します。私はthinkcurrentBuild.duration
異なるユニットを与えるのに十分賢いはずです(?)
更新2018-02-19、これはパイプラインサポートAPIプラグインの2.14リリースで修正されました。 この問題を参照してください。
duration
がいつ有効であると予想されるかについてのドキュメントが見つからない場合。しかし、判断 実装から 実行/ビルドが完了した直後に設定されているようです。完了している可能性のあるcurrentBuild.previousBuildを表すために使用されるのと同じオブジェクトであるため、currentBuildオブジェクトで使用できると思います。
だからあなたの質問に答えるために:
そうは言っても、あなたの回避策は良い解決策だと思います(関数でラップしてGPL(グローバル公共図書館)に入れるかもしれません)。
最後のボーナス質問はI think the currentBuild.duration should be smart enough to give different units (?)
です。 _Took 10min 5sec
_のように適切にフォーマットされた文字列を参照している場合、_currentBuild.duration
_は、経過した秒数とともに長い値を返すだけなので、適切にフォーマットされません。代わりに、あなたができることは hudson.Util#getTimeSpanString(long duration)
を呼び出すことです。このような:
_import hudson.Util;
...
echo "Took ${Util.getTimeSpanString(System.currentTimeMillis() - currentBuild.startTimeInMillis)}"
_
これにより、現在のビルド期間で適切にフォーマットされた文字列が返されます。