2

私は ccnet.config 内で CruiseControl.NET と devenv を使用して、VS 2005 .NET ソリューションのビルドを自動化しています。ソリューションには、相互に依存する複数のプロジェクトへの参照と、サードパーティの dll および私が作成したプロジェクトからコンパイルされた他の dll を含むライブラリ フォルダーへの参照が含まれています。

私が抱えている問題は、devenv タスクを開始する前に、SVN から .NET sln ファイルと Library フォルダー内の各プロジェクトの最新の更新を取得するように ccnet.config ファイルをセットアップしようとしていることです。

ウェブ上で何も見つからないように見えるので、誰かが私を助けたり、正しい方向に向けたりできますか?

以下は私の ccent.config ファイルです。同様の構造の他のソリューション ファイルにこれを再利用するため、繰り返しを避けるために PreProcessor を使用しています。

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">

  <cb:define MainTrunk="svn://mySvnUrl"/>
  <cb:define WorkingDir="C:\Svn\"/>
  <cb:define SvnExec="C:\Program Files\CollabNet Subversion Client\svn.exe"/>
  <cb:define ArtifactsDir="\Artifacts"/>

  <cb:define name="MyProjectName">
      <project name="$(ProjectName)"
               description="$(ProjectName) build">

        <triggers>
        <!-- check the source control every X time for changes, 
             and run the tasks if changes are found -->
          <intervalTrigger
                   name="continuous"
                   seconds="500"
                   buildCondition="IfModificationExists"
                   initialSeconds="5"/>
        </triggers>

        <sourcecontrol type="svn">

            <trunkUrl>$(MainTrunk)/$(ProjectName)/trunk</trunkUrl>

            <workingDirectory>$(WorkingDir)$(ProjectName)</workingDirectory>

            <executable>$(SvnExec)</executable> 

        </sourcecontrol> 

        <tasks>
              <devenv>
                    <solutionfile>$(WorkingDir)$(ProjectName)\$(ProjectName).sln</solutionfile>
                    <configuration>Debug</configuration>
                    <executable>C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.com</executable>
                    <!--<buildTimeoutSeconds>10</buildTimeoutSeconds>-->
                </devenv>

        </tasks>

        <publishers>
          <xmllogger />
          <artifactcleanup cleanUpMethod="KeepLastXBuilds"
                           cleanUpValue="50" />
        </publishers>

      </project>
    </cb:define>

    <cb:scope ProjectName="ProjectA">
        <cb:MyProjectName/>
    </cb:scope>

</cruisecontrol>

更新:質問をした後、おそらくこれに取り組む方法は、依存プロジェクトの変更を確認し、変更がある場合は、VS ソリューション ファイル - ProjectA のビルドをトリガーすることだと考え始めました。そのため、それに応じて ccnet.config を更新しました (以下を参照)。次に、VS sln 内の依存プロジェクトにもこれを適用します。

誰かが見て、私が正しい方向に進んでいるかどうかを教えていただければ幸いです.

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <!-- This is your CruiseControl.NET Server Configuration file. Add your projects below! -->
  <cb:define MainTrunk="svn://SvnUrl"/>
  <cb:define WorkingDir="C:\Svn\"/>
  <cb:define SvnExec="C:\Program Files\CollabNet Subversion Client\svn.exe"/>
  <cb:define ArtifactsDir="\Artifacts"/>

  <cb:define name="MyProjectName">
      <project name="$(ProjectName)"
               description="$(ProjectName) build">

        <triggers>


          <projectTrigger project="Libraries">
            <triggerStatus>Success</triggerStatus>
            <innerTrigger type="intervalTrigger"
                          seconds="120"
                          buildCondition="ForceBuild" />
          </projectTrigger>

        </triggers>

        <sourcecontrol type="svn">

            <trunkUrl>$(MainTrunk)/$(ProjectName)/trunk</trunkUrl>

            <workingDirectory>$(WorkingDir)$(ProjectName)</workingDirectory>

            <executable>$(SvnExec)</executable> 

        </sourcecontrol> 

        <tasks>
              <devenv>
                    <solutionfile>$(WorkingDir)$(ProjectName)\$(ProjectName).sln</solutionfile>
                    <configuration>Debug</configuration>
                    <executable>C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.com</executable>
                    <!--<buildTimeoutSeconds>10</buildTimeoutSeconds>-->
                </devenv>

        </tasks>

        <publishers>
          <xmllogger />
          <artifactcleanup cleanUpMethod="KeepLastXBuilds"
                           cleanUpValue="50" />
        </publishers>

      </project>
    </cb:define>

    <cb:scope ProjectName="ProjectA">
        <cb:MyProjectName/>
    </cb:scope>

    <project name="Libraries">
        <triggers>
          <intervalTrigger name="continuous" seconds="60"  buildCondition="IfModificationExists" initialSeconds="5"/>
        </triggers>
        <sourcecontrol type="svn">                      
            <trunkUrl>svn://SvnUrl/Libraries</trunkUrl>
            <workingDirectory>C:\Svn\Libraries</workingDirectory>
            <executable>C:\Program Files\CollabNet Subversion Client\svn.exe</executable>           
        </sourcecontrol> 
    </project>  

</cruisecontrol>
4

1 に答える 1

1

ライブラリ フォルダーを指すプロジェクト トランクのsvn:externalsプロパティを介して、各プロジェクト ルートにサード パーティのライブラリを含める場合は、sourcecontrol構成ブロック内で次のスイッチを使用します。

<checkExternals>True</checkExternals>

このように、CC.NET は、ライブラリ フォルダーの変更時にもコンパイルをトリガーします。

以下も必要になる場合があります。

<checkExternalsRecursive>True</checkExternalsRecursive>
于 2013-02-08T12:25:17.137 に答える