この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
Xcode 6からBotsを設定する際にTriggersという項目が追加されました。
Jenkinsなどでは既によく使われていますが、Integrationの前後にスクリプトを挟み込む事ができるようになりました。例えば、ビルド前にパッケージ管理ツールで依存ファイルをダウンロードしたり、いつも使っているチャットツール(APIが用意されていれば)に通知したりTestFligtでβ版のアプリを自動的に配布することができます。
スクリプト内で使える環境変数
一番知りたい情報はどのIntegrationが成功/失敗したかですよね。それとそれに付随したエラーのカウントなどの情報が環境変数として取得できます。(WWDCのビデオから拾ったので、他にもあるかもしれません。どこかに書いてあるんでしょうか。)
- XCS_BOT_NAME:ボット名
- XCS_INTEGRATION_NUMBER:Integration毎にインクリメントされる固有の番号
- XCS_INTEGRATION_RESULT:Integrationの結果
- XCS_TEST_FAILURE_COUNT:UnitTestがFailureになった個数
- XCS_ERROR_COUNT:Build Errorの個数
- XCS_WARNING_COUNT:Warningの個数
- XCS_ANALYZER_WARNING_COUNT:AnalyzerでWarningになった個数
設定
Botの作成時又は編集時に設定可能です。
Report NavigatorのBotのコンテキストメニューか設定ボタンからCreate Bots又はEdit Botsを選択します。
設定のウィザード画面を最後のページまで進むとConfigure bot triggers:画面にたどり着きます。
そこでBefore Integration又はAfter IntegrationのAdd Trigger -> Run Scriptを選択します。するとテキストエリアが出現するので、そこに思いの丈をおもいっきりぶちまけます。いや、スクリプトを書きます。
今回書いたのはChatWork向けのRubyスクリプトです。
#!/usr/bin/env ruby
require 'json'
require 'net/http'
require 'uri'
uri = URI.parse("https://api.chatwork.com/v1/rooms/<ルームID>}/messages")
body = "[info][title]#{ENV['XCS_BOT_NAME']}より[/title] ##{ENV['XCS_INTEGRATION_NUMBER']}の結果 : #{ENV['XCS_INTEGRATION_RESULT']}[/info]"
request = Net::HTTP::Post.new(uri.request_uri, initheader = {'X-ChatWorkToken' => "<APIトークン>"})
query_hash = {"body" => body}
request.set_form_data(query_hash)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') {|http|
http.request(request)
}
結果の表示
Botの名前、Integration番号、結果の3つが表示されています。これにエラー時のカウントや箇所、バージョン管理システムのコミットコメントが取得出来れば、必要な情報が足りそうです。
まとめ
スクリプトを書けるようになったことでCIツールとしての価値と自由度が大きく向上した結果になりした。さすがにAndroidやサーバーサイドのアプリまで面倒は見てくれませんが、iOSやMacアプリのビルド時にAppleの外の世界との連携が可能になり、より使えるツールに成長しました。
iOSやMac OSを専門でやっている生粋のApple信者な人は導入してみてはいかがでしょうか。