くりにっき

フルスタックキュアエンジニアです

Travis CIのビルド終了後にPixelaで草を生やす

mike-neck.hatenadiary.com

ちょっとしたことですが、 pixela-java-client の CI をまわした回数を Pixela で数えてみることにしました。

に影響されてやってみました。たぶんTravis CI以外でもできるはず

tl;dr;

webhook作成後に .travis.ymlに下記を書く

after_script:
  - if [ "$PIXELA_WEBHOOK_URL" != "" ]; then curl -X POST $PIXELA_WEBHOOK_URL -H 'Content-Length:0'; fi

前置き

Travis CIではテストの前後などに任意の処理を差し込めるのですが、何が使えるかは下記に全部載ってます

docs.travis-ci.com

このうちビルド終了後の処理は

  • after_success
  • after_failure
  • after_script

ですが、after_successafter_failureは名前の通りビルド成功時と失敗時のみ実行されるやつなので今回はビルド結果に関わらず実行したいのでafter_script` を使います

手順

グラフとwebhookを作成

拙作の pixela gem を使うとこんな感じ。

require "pixela"

client = Pixela::Client.new(username: ENV["USERNAME"], token: ENV["TOKEN"])

client.graph("pixela-gem-ci").create(name: "CI activity of pixela-gem", unit: "build", type: "int", color: "shibafu", timezone: "Asia/Tokyo")

client.create_webhook(graph_id: "pixela-gem-ci", type: "increment")

create_webhook の戻り値に webhookHash が入ってるので忘れずにコピペしておきます

.travis.yml修正

after_script:
  - if [ "$PIXELA_WEBHOOK_URL" != "" ]; then curl -X POST $PIXELA_WEBHOOK_URL -H 'Content-Length:0'; fi

.travis.ymlにwebhookのURLをベタ書きするとforkされた先のリポジトリでも草が生えるのが嫌だったので、環境変数が登録されてる時のみPOSTするようにしています。

TravisCIに環境変数を登録する

Settingsに https://pixe.la/v1/users/【USERNAME】/webhooks/【webhookHash】 の形式でwebhookのurlを登録する

f:id:sue445:20190218234444p:plain

READMEとかに草を貼る

こんな感じ

[![CI activity of pixela-gem](https://pixe.la/v1/users/sue445/graphs/pixela-gem-ci)](https://pixe.la/v1/users/sue445/graphs/pixela-gem-ci.html)

グラフにpurge_cache_urlsを登録する

GitHubに画像のURLを貼ると自動的にCDN経由のURLになってしまいwebhookで草を生やしてもGitHub上に反映されないため、CDNのURL(https://camo.githubusercontent.com/〜)を purge_cache_urls に登録してやる必要があります。

client.graph("pixela-gem-ci").update(purge_cache_urls: ["https://camo.githubusercontent.com/XXXXXXXXXXXXXXXXXX"])

purge_cache_urls の仕組については下記を参照

github.com

対応時のPR

github.com

実際にできたやつ

f:id:sue445:20190218233502p:plain

pixe.la