Cruise Control .NETを使って継続的インテグレーションを始めるにあたり、どうしてもやっておきたかったことがある。

それは、「ビルドの結果をランプを使って目視する」ということだ。というか正直に白状すれば、「ランプで結果を目視」がしたかったから継続的インテグレーションをやってみようと思い立ったのだけど。まさに「本末転倒」「手段が目的になっている」わけだ。でも、なんでもいいんだ、これ面白くない?って言えればw

パトライトの雄姿。

ちょっと緑がまぶしかったので、現在は半透明テープを何重か巻きつけて明るさを抑えてある。

購入したのはパトライト社の「PHE-3FB」。RS232CでPCと接続できる。イーサネットに繋がるモデルもあったけどシリアルインタフェースモデルを選んだ。より安かったので。

同社の通販サイト「ぱっとクル」で購入。大体35000円。
(今改めて確認したら、イーサネットに繋がるモデルしかリストにない・・・・シリアルインタフェースは人気ないんだろうか。)

ランプの点灯・消灯・点滅(あとブザー)に必要なプロトコルの説明が付属していて、プログラムは自分でやってね、という製品。

構成を考える

  • ビルドサーバはWindowsで、Cruise Control .NETが稼動している。
  • ランプのコントロールプログラムはunix上のスクリプトでさらっと書いてさっさと動かしたい。
  • tracでプロジェクトwebを運用しているlinuxサーバにシリアルポートがついている。
ということで、以下の構成とした。
  • cgiはGETでパラメータ指定。
    • 赤・緑・黄のそれぞれのランプを、点灯・点滅・消灯の状態にすることができる。
    • ブザー制御について、ブザーがけたたましすぎるのと、夜間ビルドで失敗してブザー鳴りっぱなし、というのも困るので実装しない。
  • CCNETからcgiの呼び出しは、コマンドラインツールでさくっと実現する。
  • cgiはperlで書き(なんでもいいけど)、シリアルポートへの出力は/dev/ttyS0を用いる。

実装

cgiスクリプト(perl)
※使用は自己責任で。何が起こっても作者は責任を負いかねます。
  • これを適当なURLで参照できるようにwebサーバ内に配置する。http://サーバ/pat0/のような。
    • パラメータは「r」「g」「y」でそれぞれ赤・緑・黄のLEDに対応する。
    • 指定できる値は、それぞれ「on(点灯)」「blink(点滅)」「off(消灯)」
    • 例:赤だけ点灯=http://サーバ/pat0/?r=on&g=off&y=off
    • 例:黄だけ点滅=http://サーバ/pat0/?r=off&g=off&y=blink
  • シリアルポートの設定をしていないので・・・
    • 事前に設定しておくか、制御コードを追加してください。設定すべき状態はPHE-3FBのマニュアルに書いてある。9600baud
    • ここではFedora Core 5を使っているが、デフォルトのままで動くようだ。
  • 参照するシリアルポートが/dev/ttyS0固定なので・・・
    • 適宜変更するか、コンフィギュレーション可能にしてください。
  • /dev/ttyS0はownerがrootでgroupがuucp。otherには読み書き権がないので・・・
    • 今にしてみればsuexecを使うかotherにrwを付与すればよかったのかもしれないが、apacheユーザをuucpグループに加えた。

セットアップ

後は、CCNETから呼び出しできるようにccnet.configを設定する。
使っているCCNETが未だに1.0.1なので、最新版のCCNETだと動かないかも??
  • ビルドタスクの最初にビルド中を表す「黄」点灯状態に。
    <tasks>
        <exec>
            <executable>pat.bat</executable>
            <buildArgs>begin</buildArgs>
            <buildTimeoutSeconds>30</buildTimeoutSeconds>
        </exec>
    
  • pat.batの中身は以下のとおり。パス/URL関係は環境に合わせて適宜。
    @echo off
    set STATUS="%CCNetIntegrationStatus%"
    set url=http://linuxサーバ/pat0/?
    
    if "%1" == "begin" (
      set para="%url%r=off&g=off&y=on"
    ) else (
      if %STATUS% == "Success" (
        set para="%url%r=off&g=on&y=off"
      ) else (
        set para="%url%r=on&g=off&y=off"
      )
    )
    
    curl.exe -s %para% > nul
    
  • ビルド結果のpublish時に再度ランプ点灯。
    ビルド成功なら緑、ビルド失敗なら赤を点灯させる。状態の判定は、pat.batの中で変数環境CCNetIntegrationStatusを参照して行っている。
    <publishers>
        <xmllogger logDir="log" />
    
        <exec>
            <executable>pat.bat</executable>
            <buildTimeoutSeconds>30</buildTimeoutSeconds>
        </exec>
    
       
Powered by Google App Engine

このブログ記事について

このページは、tckzが2006年12月27日 01:46に書いたブログ記事です。

ひとつ前のブログ記事は「USB機器を作る - 思いつき編」です。

次のブログ記事は「tracとGraphvizPlugin」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.04