Antで継続的インテグレーション
JUnit&DbUnitによるテストケース数がついに1000を越え、貧弱なマシンでは全てを実行するのにめちゃくちゃ時間が掛かる、もしくはOutOfMemory...
「CVSにコミットする前は全テストを実行してから」というルールをプロジェクトで実施したけれども最近は破綻気味でした。
そこで、継続的インテグレーションの実践。
今さらって感じもしますが、本ではずっと前に読んでたものの、実践するのは今回が初めて。
Antを利用して作成しました。
その時、参考になった本がこれ。
- 作者: 関口宏司
- 出版社/メーカー: 技術評論社
- 発売日: 2004/03/30
- メディア: 単行本
- クリック: 14回
- この商品を含むブログ (13件) を見る
Antってこんなに色々出来るんだーと改めて実感。
今回の継続的インテグレーションってその集大成かも。
最後の「all_test」をcronで定期実行するようにすれば、
- CVSから最新をチェックアウト
- コンパイル
- テスト実施
- レポートの作成
- エラーがあった場合はメール送信
ってことが可能になります。
<target name="checkout" description="最新ソースを取得"> <!-- CVSの設定 --> <property name="cvsServer" value="192.168.0.10" /> <property name="cvsRoot" value="cvs" /> <property name="user" value="****" /> <property name="password" value="****" /> <delete dir="${root}" /> <cvspass cvsRoot=":pserver:${user}@${cvsServer}:${cvsRoot}" password="${password}" /> <cvs cvsRoot=":pserver:${user}@${cvsServer}:${cvsRoot}" package="${root}" dest="." /> </target> <target name="test" description="全テスト実行"> <mkdir dir="${test.result}" /> <delete> <fileset dir="${test.result}" includes="**/*" /> </delete> <junit printsummary="yes" fork="true" maxmemory="512m" errorproperty="test.error" failureproperty="test.error"> <classpath refid="build.classpath" /> <formatter type="xml" /> <batchtest todir="${test.result}"> <fileset dir="${root}/test"> <include name="**/*Test.java" /> </fileset> </batchtest> </junit> </target> <target name="report" description="テストレポートの作成"> <junitreport> <fileset dir="${test.result}"> <include name="TEST-*.xml" /> </fileset> <report format="frames" todir="${test.report}" /> </junitreport> </target> <target name="send_error_mail" if="test.error" description="エラー通知メール送信"> <!-- メール送信の設定 --> <property name="smtp.server" value="localhost" /> <property name="from.mailaddress" value="xxx@mail.com" /> <property name="to.mailaddress" value="***@mail.com" /> <property name="subject" value="engine全テストエラー" /> <property name="message" value="engine全テストでエラーが発生しました。詳細は「${basedir}/${test.report}/index.html」を参照" /> <mail from="${from.mailaddress}" tolist="${to.mailaddress}" subject="${subject}" message="${message}" mailhost="${smtp.server}" /> </target> <target name="all_test" depends="checkout,compile,test,report,send_error_mail"/>