Jenkinsパイプラインを使用してAndroidアプリケーションビルドのプロセスを構成しています。
ビルドの開始時と終了時に、関連するSlackチャネルにメッセージが送信されます。
Jenkinsfileの関連部分は次のようになります。
slackSend (channel: '#slack-test', color: 'warning', message: "Finished: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' State: ${STATE}. Artifacts can be viewed here: ${env.BUILD_URL}artifact/Product/build/outputs/ ")
上記の情報に加えて、ビルドの終了を通知するメッセージまでビルドが実行されるのにかかった時間も含めたいと思います。
外部プラグインを追加せずにそれを行うことは可能ですか?この情報を保持する環境変数があれば完璧ですが、そのような変数は見つかりません。
このjenkins-pipelineスクリプトはGroovyにあるので、単純にnew Date()
。 message
引数のこの"Current time ${new Date()}"
のようなものが機能する必要があります。
slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date()}")
これにより、チャンネルに次のメッセージが表示されます。
Current time: Thu Oct 13 17:25:12 CEST 2016
特定の日付形式が必要な場合は、format(String format)
メソッドを使用できます(例:"${new Date().format('dd/MM/yyyy')}"
)。
slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date().format('dd/MM/yyyy')}")
これにより、代わりに次のメッセージが生成されます。
Current time: 13/10/2016
[〜#〜] update [〜#〜]
外部プラグインを使用したくないので(少し注意が必要です)、jenkins-pipelineの次のスクリプトを使用してファイルに開始時間を保存します。
def f = new File("/tmp/buildStart.txt")
def start = new Date().format('dd/MM/yyyy HH:mm:ss')
f.text = start
slackSend color: 'red', message: "Build start at ${start}"
次に、ビルドが終了する他のjenkinsパイプラインで、ファイルから日付を解析し、現在の時刻との差を取得します。
def f = new File("/tmp/buildStart.txt")
def startDate = new Date().parse('dd/MM/yyyy HH:mm:ss',f.text)
def endDate = new Date()
def tookTime = groovy.time.TimeCategory.minus(endDate,startDate).toString()
slackSend color: 'red', message: "Total time: ${tookTime}"
${currentBuild.durationString}
を使用して、ビルド期間を取得できます。宣言型パイプラインスクリプトで使用しています。
注: HipChatプラグイン を使用している場合は、${BUILD_DURATION}
(以前は${DURATION}
)を使用できます。 )hipchatSend
コマンドの変数(プラグインによって他のいくつかの変数とともに伝播されます)。
例:
post {
success {
hipchatSend color: 'GREEN', room: 'My room', failOnError: true, notify: false,
message: 'Build <a href=\'${BUILD_URL}\'>${JOB_DISPLAY_NAME} #${BUILD_NUMBER}</a> has been built. Took ${BUILD_DURATION}. See the <a href=\'${BUILD_URL}/console\'>output</a>.'
}
}
ここにもう少しあります Jenkins環境変数に関する情報 ジョブ構成で使用できます。
_${currentBuild.durationString}
_を使用して、人間が読める形式(n分n秒)でフォーマットすることができます。ただし、プレフィックスは_and counting
_になりますが、これはちょっと奇妙です。
だから私は続いた this${currentBuild.durationString.replace(' and counting', '')}
文字列から「andcounting」の部分を削除するには、次のようにします。
"${currentBuild.durationString.minus(' and counting')}"