drone.io でHipchat通知時の文面をカスタマイズする

この記事は drone.io Advent Calendar 2017 - Adventar の12日目の記事です。

drone.io は Goで作られたオープンソースのCD (Continuous Delivery)環境です。

github.com

Hipchat Plugin ではビルドが終わったときにHipchatへ通知することができます。

基本的な使い方は以下のようになります。

hipchat:
  image: jmccann/drone-hipchat
  url: https://hipchat.example.com
  room: 'test-room'
  secrets: [ hipchat_auth_token ]

template を使うことで通知時の文面をカスタマイズすることができます。 しかし公式のドキュメントが間違っているので細かいカスタマイズを解説しておきます。

まず基本形はいかのようになります。公式のドキュメントでは{{#successの間にスペースが入っていますが、これがあると動きません。

hipchat:
    template: |
      {{#success build.status}}
        build {{ build.number }} succeeded. Good job.
      {{else}}
        build {{ build.number }} failed. Fix me please.
      {{/success}}

テンプレートエンジンにはaymerick/raymondが利用されています。デフォルトの文面は以下のテンプレートが利用されていますので、これを元にカスタマイズするのがおすすめです。

template: |
  <strong>{{ uppercasefirst build.status }}</strong>
  <a href=\"{{ build.link }}\">{{ repo.owner }}/{{ repo.name }}#{{ truncate build.commit 8 }}</a>
  ({{ build.branch }}) by {{ build.author }} in {{ duration build.created build.finished }} </br>
  - {{ build.message }}
ビルドイン関数

以下の関数が利用できます。

関数名 機能
uppercasefirst(string) 1文字目を大文字にする
uppercase(string) 大文字にする
lowercase(string) 小文字にする
duration(started, finished) ビルドにかかった時間
datetime(timestamp, layout, zone) 日時をlayout文字列に従って文字列に変換する
truncate(string, length) 文字列を指定した文字数を切り詰める
success(condition) ブロックで囲んだ場所をビルド成功時に評価する
failure(condition) ブロックで囲んだ場所をビルド失敗時に評価する
urlencode ブロックで囲んだ場所をurlencodeする
ビルトイン変数

以下の変数が表示に利用できます。

変数 説明
build.number ビルド番号
build.event ビルド発生イベント
build.commit コミットID
build.branch ブランチ名
build.remote リモートURL
build.message コミットメッセージ
build.author コミットした人
build.avatar コミットした人のavatar画像のURL
build.email コミットした人のメールアドレス
build.link ビルド画面へのリンク
repo.owner リポジトリオーナー
repo.name リポジトリ
repo.link リポジトリのURL
repo.branch 対象のブランチ