実戦CruiseControl.NET+NAnt(二)-CC.NET中のトリガー


作者:Tony Qu
CC.NETのプロファイルは、インストールディレクトリのserverディレクトリの下にあります。cnet.co.nfigというファイルがあります。このファイルを配置してこそ、CC.NETは正常に動作します。
CCNetConfigを通して、cnet.co.figの構成内容についてたくさん学ぶことができます。まず、非常に重要な概念であるフリップフロップを見にきます。
ここのフリップフロップは現在の項目だけに対して有効であり、これらのトリガーはほとんどタレッジがない理由でもあります。例えばInterval Triggerは、すべての属性がトリガの対象に言及されていません。
CC.NETは6つのトリガーを提供する。
Interval Triggerは、文字通り、一定時間ごとにタスクをトリガするトリガーです。
Filter Triggerは単独で作業できないので、他のTriggerと一緒に使用しなければなりません。FilterTriggerというのは、トリガーをフィルタリングするための条件です。例えば、Interval Triggerを5分ごとに設定していますが、このInterval Triggerは作業時間だけでトリガしてほしいです。それでは、私達はFilterTriggerでInterval Triggerのトリガ時間を9:00~18:00まで制限できます。
MultiTriggerはWPFのMulti Triggerと似ています。複数のトリガーを同時に実行し、トリガーの結果をAndまたはOr操作します。
ScheduleTriggerとWindowsが持つ計画タスクの機能は非常に似ています。特定の時間にタスクをトリガすることができます。
Project Triggerは、指定されたCC.NET項目buildが完了した場合のみ、タスクをトリガするトリガーです。
UrlTriggerは、ある特定のUrlページの内容が変化したときだけ、タスクをトリガするトリガーです。
 
次の例を挙げます。
シーン1:daily buildのトリガーを設置したいです。毎日午前1時に一回触発して、平日だけして、土日はしません。
特定の時間循環トリガですので、ScheduleTriggerで実現できます。コードは以下の通りです。
<scheduleTrigger time="1:00" buildCondition="ForceBuild" name="ScheduledTask1">
  <weekDays>
    <weekDay>MondayweekDay>
    <weekDay>TuesdayweekDay>
    <weekDay>WednesdayweekDay>
    <weekDay>ThursdayweekDay>
    <weekDay>FridayweekDay>
  weekDays>
scheduleTrigger>
CCNetConfigに設定すると下図のようになります。
 
シーン2:継続的に統合するには一定時間ごとにブートが必要で、以前のcheck inは動作可能であることが確定されています。だから、毎週月曜日から金曜日までの勤務時間(9:00~18:00)を設定してトリガし、15分ごとにトリガするトリガーが必要です。
ここではInterval Trigger+FilterTriggerを使用したいです。FilterTriggerはフィルタリング時間の9:00~18:00です。
<filterTrigger startTime="09:00" endTime="18:00">
    <trigger type="intervalTrigger" seconds="600" />
    <weekDays>
        <weekDay>MondayweekDay>
        <weekDay>TuesdayweekDay>
        <weekDay>WednesdayweekDay>
        <weekDay>ThursdayweekDay>
        <weekDay>FridayweekDay>
    weekDays>
filterTrigger>
CCNetConfigに設定すると下図のようになります。
シーン3:プロジェクトAのbuildが成功した後に、現在のプロジェクトbuild(通常プロジェクトAはコアコードライブラリであり、現在のプロジェクトはそれに依存しています。)をトリガします。成功したときだけトリガするので、triggerStatus=Successです。
<triggers>
  <projectTrigger project="task2">
    <triggerStatus>SuccesstriggerStatus>
    <innerTrigger type="intervalTrigger" seconds="1800" buildCondition="ForceBuild" />
  projectTrigger>
triggers>
CCNetConfigに設定すると下図のようになります。