Notify Gradle's build completion to Slack.
Gradleのビルド終了をSlackに通知する
今関わってるプロジェクトのビルドが諸事情により酷く長く、Instant Runが使えないこともしばしばあり、ビルド終了の通知を受けたくなったのでやってみたメモ。
How to
Slack通知を専門に行うtaskを追加する。
[project dir]/gradle/build_notifier.gradle
task pushToSlack << { Properties localProperties = new Properties() localProperties.load(project.rootProject.file('local.properties').newDataInputStream()) (["${project.rootDir}/gradle/notify_build_finish.sh", localProperties.getProperty('slackToken')].execute().text) } tasks.whenTaskAdded { task -> if (task.name ==~ /assemble.*/) { task.doLast { project.tasks.getByName("pushToSlack").execute() } } }
NOTE: task名が assemble
で始まるタスクの終了を通知します
通知を行うシェルスクリプトを追加する。
[project dir]/gradle/notify_build_finish.sh
#!/bin/bash curl -X POST --data-urlencode 'payload={"channel": "#チャンネル名 または @ユーザ名", "username": "Gradle", "text": "Build has just finished.", "icon_emoji": ":gradle:"}' https://hooks.slack.com/services/$1
NOTE: chmod +x notify_build_finish.sh
で実行権限の付与を忘れないこと。
SlackのIncomingWebhookのTokenを設定。
[project dir]/local.properties
slackToken=*********/*********/***********************
追加したtaskを読み込む。
[project dir]/app/build.gradle
... apply from: file('../gradle/build_notifier.gradle') ... android {...} ...
めも
おまけ
単純にMac内で通知が見れればいい場合は、 .bashrc
に
alias notify='osascript -e '"'"'display notification "めっせーじ" with title "たいとる" subtitle "さぶたいとる" sound name "Purr"'"'"''
と入れておいて、
$ ./gradlew check ; notify
なんてすると終了時に通知を受け取れますね。
gradlew自体にaliasを張って、
alias gradle='echo $@ ; osascript -e '"'"'display notification "めっせーじ" with title "たいとる" subtitle "さぶたいとる" sound name "Purr"'"'"''
こんな感じにしたかったんだけどうまくいきませんでした。:thinking_face:
以上。