Bitriseのビルド状況をBitbarで見やすくする


背景

CI環境を運用していると、設定したビルドの進行状況が気になってモニターしたくなる時がしばしば発生します。
状況を可視化するため、Bitriseには実行状況が確認できるダッシュボードや、Slack通知を始めとした通知系Integrationが数多く用意されています。

しかし、いちいち開いて確認しなければならなかったり、ビルドに組み込む必要があったりと今ひとつ気軽さに欠けます。
気になった時に状況をちら見したい!ということで、Bitbarを使ってmacOSのツールバー上で確認できるスクリプトを作ってみました。

Bitrise APIを活用する

幸いなことに、BitriseにはAPIが用意されており、実行状況を取得したり、ビルドをトリガーできることができます。

Bitrise.io API v0.1 (Work In Progress) - Bitrise DevCenter
※2018/12/05現在、WIPとされているので今後大幅な変更が入る可能性があります

$ curl https://api.bitrise.io/v0.1
{"message":"Welcome to Bitrise API v0.1! You can find the API Documentation at: http://devcenter.bitrise.io/api/v0.1"}

Bitrise内のユーザー設定より、「Personal access token」を発行することで自分のアカウントに関連した情報が取得できるようになります。

curl -H 'Authorization: token THE-ACCESS-TOKEN' 'https://api.bitrise.io/v0.1/me'
{
  "data": {
    "avatar_url": "",
    "email": "[email protected]",
    "slug": "8e82ac7601178f17",
    "username": "api-demo"
  }
}

Bitrise.io API v0.1 (Work In Progress) - Bitrise DevCenterより)

Bitriseでは、ユーザー、Organization、App、Build全てに固有のID(「Slug」)が振られており、このSlugを使って必要な情報を取得します。
特定のAppを確認するには、コンソールのURLから確認するのが一番お手軽です。
https://app.bitrise.io/app/[APP_SLUG]#/builds

curl -H 'Authorization: token THE-ACCESS-TOKEN' 'https://api.bitrise.io/v0.1/apps/APP-SLUG/builds?limit=1'
{
    "data": [
      {
        "abort_reason": null,
        "branch": "master",
        "build_number": 80,
        "commit_hash": null,
        "commit_message": null,
        "commit_view_url": null,
        "environment_prepare_finished_at": null,
        "finished_at": null,
        "is_on_hold": false,
        "original_build_params": {
          "branch": "master",
          "workflow_id": "primary"
        },
        "pull_request_id": 0,
        "pull_request_target_branch": null,
        "pull_request_view_url": null,
        "slug": "319f2d6b620b5cbe",
        "stack_config_type": "standard1",
        "stack_identifier": "linux-docker-android",
        "started_on_worker_at": null,
        "status": 0,
        "status_text": "in-progress",
        "tag": null,
        "triggered_at": "2018-11-07T16:26:38Z",
        "triggered_by": "bitrise_api_doc",
        "triggered_workflow": "primary"
      }
    ],
    "paging": {
      "next": "51a8e5b7b323fd7e",
      "page_item_limit": 3,
      "total_item_count": 80
    }
}

Bitrise.io API v0.1 (Work In Progress) - Bitrise DevCenterより)

ビルド履歴を取得できる/buildsエンドポイントでは細かくフィルターを設定でき、
ビルドの状態、トリガーされた時間、コミットメッセージといった要素で絞り込むことができます。

Bitbarで表示できるスクリプト

このBitriseのAPIを使ったスクリプトを書いてみました。
https://gist.github.com/shinmiy/fc7fc0d20c40936f453e9ca2eccc298d

過去1週間分のビルドを取得し、
実行中のビルド数、実行中のビルドの詳細、過去ビルドの詳細、それぞれへのリンクをいい感じに表示してくれます。

設置方法

BitbarのPluginフォルダに設置

スクリプトをBitbarのプラグインフォルダに設置します。
ファイルに実行権限を付与しておきます

chmod +x bitrise_status.1m.rb

トークンを発行する

ユーザー設定 よりPersonal access tokensを発行します。
以下の部分をGenerate newで発行したトークンに差し替えます。

TOKEN = 'YOUR_TOKEN_HERE'

App Slugを確認する

ビルド画面のURLからSlugを確認して、

https://app.bitrise.io/app/[これがSlug]#/builds

以下の部分を差し替えます。

APPS = { 'Your App Name' => 'App Slug', 'Another App Name' => 'Another App Slug' }

設定が完了すると、定期的にBitriseがスクリプトを実行しはじめ、ツールバー上にビルド状況が表示されます。

まとめ

ダッシュボードが綺麗なBitriseですが、APIもWIPながらかなり豊富に用意されています。
bitrise.ymlのGET、POSTまであるので、githubでbitrise.ymlを管理して変更が入ったらPOST…なんてことできるかもしれません。

APIを読んでみるついでに書いてみたスクリプトですが、かなり重宝しているのでぜひお試し下さい!