Hatena::ブログ(Diary)

suzukijの日記 このページをアンテナに追加 RSSフィード

2013-02-17

Jenkinsでビルド後に音(BGM、SE)を鳴らしてみた

Twitterビルド後の通知にゲームのBGMを鳴らしてるという話を聞いたのでマネしてみたところ結構良かったのでメモ。

  • 導入した理由
    • 楽しそう
    • 通知はメールやらIRCやらでやっていたけどなんとなく埋もれがち、気付かなかったりすることもあった
  • ビルド後に音を鳴らしてみて
    • そこに居れば絶対に気付くのは良い
    • ビルド失敗音がなる度に失敗した理由をチームメンバと話すようになった。「あ、今の自分かも。調べますね。」みたいな。
    • フィードバックがより早くなった
    • ゲームみたいで楽しい
    • 他チームの人も「何やってんの?」みたいな感じで Jenkins とか CI な開発に関心持ってくれる
  • その他
    • BGM、音はチームメンバで楽しく決めたい。趣味の合う合わないとか。
    • 失敗音はなるべく軽いものを(継続的に鳴るので重いと辛くなっちゃう)

Jenkinsで音を鳴らすには

f:id:suzukij:20130216223302j:image

上の例は成功時には alleluia、失敗時には EXPLODE それぞれ異なるサウンドが鳴るように設定をしています。

選択できる音源は予めプラグインに同梱されているのでとりあえず選択しておけば音を鳴らすことができます。(どれも微妙ですが…)

これだけの設定でJenkinsサーバからビルド後の結果によって音を出すことができます。お手軽。簡単。


サウンドファイルをカスタマイズしたい場合

上記の設定で音を鳴らすことはできましたが、おそらく自由に音源を設定したくなるハズです。

Sound Plugin では当然設定できるようになっています。音源ファイルのzip作ってJenkinsの設定するだけです。

手順は以下の通り

  • サウンドファイルの作成
  • Jenkinsの設定
    • Jenkinsの管理 > システムの設定 のリンクから設定画面を開く
    • Jenkins Sounds の Sound archive location に 作成したzipファイルのパスを設定する(http://, file:// の表記で指定)

ちなみに自分のチームでは 成功時には某RPGのレベルアップの音、失敗時にはヒゲが死んだ時の音 を流しています。

ビルドの度に鳴りますし、短くて軽い雰囲気の音が良いかと思います。


JenkinsサーバではないPCから音を出したいケース

自分のプロジェクトではその辺に転がってたノートPCをJenkinsサーバにしたため、Jenkins自体のPCから音が鳴っても良い状態です。

以下のようにJenkinsサーバが開発チームのすぐ近くある場合は問題ありません。


チームによってはJenkinsをどこか別の場所のサーバ上に立てることもあると思います。

以下のようにJenkinsサーバが開発チームのすぐ近くにない場合はJenkins自体から音が鳴っても気付くことはできません。


Sounds plugin はバージョン0.1がリリースされた当初はそこまで対応していなかったみたいですがバージョン0.4からは別のPCのブラウザ上から音を鳴らすことが可能になっています。素敵。

 ※かえる本でも Sounds plugin は紹介されていたのですがまだ対応される前だったのか触れられていませんでした。

以下のように音が出るPCを開発チームの側においてブラウザを上げておくだけで音でビルド結果を通知することができます。


以下手順

  • Jenkinsの設定
    • Jenkinsの管理 > システムの設定 のリンクから設定画面を開く
    • Jenkins Sounds の Play through HTML5 Audio enabled browser.にチェック
  • 音を鳴らすPCの準備
    • ブラウザを立ちあげて http://Jenkinsサーバ/sounds/jsonpdemo を開いておくだけ
      • HTML5 Audio を利用して音を鳴らしているみたいなので動作するブラウザを使用しないといけないみたいです。(ちなみにiPhone、nexus7で試したけどダメでした…)

Jenkins

Jenkins

かえる本では通知だけで8章が割かれています。通知重要。後で気付いたのですが Sounds plugin もしっかりと紹介されていました。読んだつもりだけど記憶が…


おまけ

こんなのもあるらしいです。ウチは使ってないですが…。つなぎのヒゲの画像とBGM使ってるしアウトw

Html Audio Notifier

2012-06-11

Jenkinsを使って継続的に静的コード解析をさせる

最近プロジェクト内でJenkinsをどう運用しているのか聞かれることがあったので書いておくことにします。

ビルドだけではもったいないので色々なことをやらせているのですが、とりあえず今回は静的コード解析について。


コード解析の設定は最初は少しだけ面倒かもしれませんが、出力されるレポートはプロジェクトの大事なインプットとなってくれます。

出力されたレポート、グラフを見て自分達の日々開発しているものをチェックしてチーム内の朝会やふりかえりでアレコレ語るのがいいんじゃないかと思います。


まずは必要なプラグインインストール

静的コード解析
Jenkinsで集計したレポートをさらに見やすくするプラグイン

とりあえずこれ。静的コード解析の結果をまとめて表示してくれます。

以下2つのプラグインはジョブの数が増えてきたら便利なので利用しています。新規ダッシュボードを作成してビューを設定すればジョブを跨いだ警告件数をチェックできます。


ビルドファイル(pom.xml, build.xmlの設定)

 Jenkins自身ではコード解析、結果の出力はやってくれないのでコード解析の処理自体はAntMavenにやらせます。

 Mavenの場合はpom.xml, Antの場合はbuild.xmlに設定します。

 コード解析のプラグインを突っ込むとジョブの設定画面のヘルプで丁寧に設定方法まで教えてくれるのでMavenAntが苦手でもなんとかなると思います。

 FindBugsの場合は↓のような感じ

f:id:suzukij:20120607042540p:image

すべての解析ツールの設定をしておきます。(FindBugs, CheckStyle, PMD, Cobertura)

※Task Scanner Pluginは設定不要


Jenkinsのビルド実行の設定

Mavenの場合、こんな感じで設定してXMLのレポート吐かせておけばJenkinsさんが見易くレポーティングしてくれます。

f:id:suzukij:20120610223950p:image

以上で設定完了です。一気に設定せずにビルド結果、レポートの表示を確認しながら1つずつ追加していった方がいいと思います。

設定ができていればジョブ実行をするとJenkins上で解析結果のレポートが表示されるはずです。 


自分が所属するチームでの運用例

  • ジョブのトリガ
    • SCMレポジトリをポーリング
    • コードを修正しコミットする度にビルドとコード解析が実行される。静的コード解析をローカル環境で手動でやる とかもう戻れません。
  • 通知
    • 基本のメール通知、IRC通知Chrome拡張の通知
    • すぐに気付くことができれば何を利用しても良いと思う。
    • ビルドの失敗が続いて通知がウザイから切るっていうのは自分的には絶対ナシ。ウザイから早いとこビルドを安定させようという流れに持っていきたい。
  • Jenkins上のレポート
    • 出力されたレポート内容は朝会、ふりかえりのインプットに。問題の確認、共有、日々の改善につなげる。
    • コード解析ツールは便利だけど誤検知も多いことをちゃんと知った上で利用する。

まとめ的な何か

Jenkinsにビルドユニットテストまでしかやらせてないっていう話を結構聞くので書いてみました。

そこまで自動化できているのなら次のステップの静的コード解析までやらせちゃっていいのになぁと。導入コストも低いですし。

レガシーなのでユニットテストないからウチはCIなんて無縁だよ」っていうのもよく聞きますがユニットテストなくても

とりあえずJenkins立てて静的コード解析を継続的にかけさせるのがいいんじゃないかと思います。


CPDでどれだけコピペコードがあるのか分かりますし、FindBugs、PMD、CheckStyleでよくないコードがどれだけ含まれているのか、どんな内容なのか傾向を探れます。

自動で継続的に解析しておけば "これ以上警告が増えたら通知する" とか設定でできますし。

解析ツールの結果は常に絶対ではありませんが充分参考にはなります。

また結果が時系列にグラフになることで変化に気付くことができます。

「最近警告が減ってきているのでイイネ」とか「昨日極端に増えたけどどんな変更した?」とか。


プロジェクトやチームによりけりだとは思いますが個人的にはビルドユニットテスト、静的コード解析まではとりあえず導入していいんじゃないかと思います。

設定さえ頑張ればJenkinsが勝手にやってくれますし。


もっと良い方法があったら教えていただけたら嬉しいです。

Jenkins

Jenkins