0

プロジェクト A またはプロジェクト B のビルドが成功すると、このプロジェクト (C) がトリガーされるように、次のトリガーを構成しています。

<triggers>
  <multiTrigger operator="And">
    <triggers>
      <multiTrigger operator="Or">
        <triggers>
          <projectTrigger serverUri="tcp://localhost:21235/CruiseManager.rem" project="A" >
            <triggerFirstTime>False</triggerFirstTime>
            <triggerStatus>Success</triggerStatus>
            <innerTrigger type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
          </projectTrigger>
          <projectTrigger serverUri="tcp://localhost:21235/CruiseManager.rem" project="B">
            <triggerFirstTime>False</triggerFirstTime>
            <triggerStatus>Success</triggerStatus>
            <innerTrigger type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
          </projectTrigger>
        </triggers>
      </multiTrigger>
      <scheduleTrigger time="20:30" buildCondition="ForceBuild">
        <weekDays>
          <weekDay>Monday</weekDay>
          <weekDay>Tuesday</weekDay>
          <weekDay>Wednesday</weekDay>
          <weekDay>Thursday</weekDay>
          <weekDay>Friday</weekDay>
        </weekDays>
      </scheduleTrigger>
    </triggers>
  </multiTrigger>
</triggers>

ただし、実際に必要なのは、プロジェクト A と B の両方の最後のビルドが成功した場合にのみ、プロジェクト C をビルドすることです。次のようなものがうまくいくと思いましたが、projectTrigger を論理的に反転する方法はないようです。

<triggers>
  <multiTrigger operator="And">
    <triggers>
      <multiTrigger operator="Or">
        <triggers>
          <projectTrigger serverUri="tcp://localhost:21235/CruiseManager.rem" project="A" >
            <triggerFirstTime>False</triggerFirstTime>
            <triggerStatus>Success</triggerStatus>
            <innerTrigger type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
          </projectTrigger>
          <projectTrigger serverUri="tcp://localhost:21235/CruiseManager.rem" project="B">
            <triggerFirstTime>False</triggerFirstTime>
            <triggerStatus>Success</triggerStatus>
            <innerTrigger type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
          </projectTrigger>
        </triggers>
      </multiTrigger>
      <projectTrigger serverUri="tcp://localhost:21235/CruiseManager.rem" project="A" >
        <triggerFirstTime>False</triggerFirstTime>
        <triggerStatus>NotFailure</triggerStatus>
        <innerTrigger type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
      </projectTrigger>
      <projectTrigger serverUri="tcp://localhost:21235/CruiseManager.rem" project="B">
        <triggerFirstTime>False</triggerFirstTime>
        <triggerStatus>NotFailure</triggerStatus>
        <innerTrigger type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
      </projectTrigger>
      <scheduleTrigger time="20:30" buildCondition="ForceBuild">
        <weekDays>
          <weekDay>Monday</weekDay>
          <weekDay>Tuesday</weekDay>
          <weekDay>Wednesday</weekDay>
          <weekDay>Thursday</weekDay>
          <weekDay>Friday</weekDay>
        </weekDays>
      </scheduleTrigger>
    </triggers>
  </multiTrigger>
</triggers>

これを達成する別の方法はありますか?

4

1 に答える 1

1

CC.netは、トリガーロジックを否定する方法を提供していないようです。トリガーがCC.netにソース管理ブロックを実行し(変更をチェックする)、統合を開始するタイミングを指示することを考えると、理解できます。ただし、でsourcecontrolブロックを使用するtype="external"こともできますが、独自の実行可能ファイルを使用して、統合を開始するかどうかを決定できます。

また、ファイルシステムのソース管理ブロックを使用して、特定のファイルが変更されたときに統合を開始することもあります。たとえば、c:\onsuccess\success.txt成功を示すために使用される場合、が更新されました。

<sourcecontrol type="filesystem">
   <repositoryRoot>c:\onsuccess</repositoryRoot>
   <ignoreMissingRoot>true</ignoreMissingRoot>
 </sourcecontrol>

補遺:関連ドキュメントへのリンク

于 2012-12-10T14:31:50.930 に答える