2

バックグラウンド

私は、ローカル デスクトップで実行されている 2 つの VM で動作する継続的インテグレーション システムをまとめています。VM #1 (ツールボックス) は、CruiseControl.Net、Subversion、BugTracker.Net、および SQL Server Express を実行しています。VM #2 ( BuildMaster ) は NAntContrib で NAnt を実行しており、VB 6.0 と 1.0/1.1/2.0/3.5 .Net Framework SDK がインストールされています。その意図は、BuildMaster にインストールされるものを厳密に制御し、Toolbox および開発者ワークステーションではより緩くすることです。

問題

Toolbox で CCNet プロジェクトを作成し、BuildMaster で VB 6.0 のテスト アプリケーションを正常にコンパイルしましたが、ビルドが先週失敗し始めました。私が覚えている唯一のことは、Toolbox に BugTracker.Net と SQL Server Express をインストールしたことです。

症状

ビルドは失敗し、例外が返されます。

<![CDATA[Starting 'vb6 ( /make "\\buildmaster\Working\TestApp\TestApp.vbp" /outdir "\\buildmaster\Working\TestApp\build" /out "\\buildmaster\Working\TestApp\TestApp.build.err")' in '\\buildmaster\Working\TestApp']]></message><duration>711.02240000000006</duration></task><duration>761.09440000000006</duration></target><failure><builderror><type>NAnt.Core.BuildException</type><message><![CDATA['vb6' failed to start.]]></message><location><filename>\\buildmaster\Working\TestApp\TestApp.build</filename><linenumber>39</linenumber><columnnumber>4</columnnumber></location><stacktrace><![CDATA[   at NAnt.Core.Tasks.ExternalProgramBase.StartProcess() in c:\Nant\src\NAnt.Core\Tasks\ExternalProgramBase.cs:line 501
   at NAnt.Core.Tasks.ExternalProgramBase.ExecuteTask() in c:\Nant\src\NAnt.Core\Tasks\ExternalProgramBase.cs:line 386
   at NAnt.Contrib.Tasks.Vb6Task.ExecuteTask() in c:\Nant\contrib\src\Tasks\Vb6Task.cs:line 220
   at NAnt.Core.Task.Execute() in c:\Nant\src\NAnt.Core\Task.cs:line 186
   at NAnt.Core.Target.Execute() in c:\Nant\src\NAnt.Core\Target.cs:line 247
   at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) in c:\Nant\src\NAnt.Core\Project.cs:line 910
   at NAnt.Core.Project.Execute() in c:\Nant\src\NAnt.Core\Project.cs:line 862
   at NAnt.Core.Project.Run() in c:\Nant\src\NAnt.Core\Project.cs:line 947]]></stacktrace><internalerror><type>System.ComponentModel.Win32Exception</type><message><![CDATA[The system cannot find the file specified]]></message><stacktrace><![CDATA[   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at NAnt.Core.Tasks.ExternalProgramBase.StartProcess() in c:\Nant\src\NAnt.Core\Tasks\ExternalProgramBase.cs:line 498]]></stacktrace></internalerror></builderror></failure><duration>1211.7424</duration></buildresults>

明らかに、例外の本質は[CDATA['vb6' failed to start.]]です。私の問題は、Nant ビルドを BuildMaster で直接実行すると、毎回ビルドが正常に完了することです。

完全を期すために、ここに私の NAnt ビルド スクリプトを示します。

<?xml version="1.0" ?>
<project name="TestApp" default="build">
    <!-- set build.date property to current date in format yyyy-MM-dd -->
    <tstamp property="build.date" pattern="yyyy-MM-dd" />

    <!-- global project settings -->
    <property name="project.name" value="TestApp" />
    <property name="project.version" value="1.00" unless="${property::exists('project.version')}" />
    <property name="project.release.type" value="release" unless="${property::exists('project.release.type')}" /> <!-- nightly / dev / alpha / beta# / rc# / release -->
    <property name="build.warnaserror" value="false" />

    <!-- default configuration -->
    <property name="project.client" value="" />
    <property name="build.defines" value="" />
    <property name="build.number" value="${math::abs(math::floor(timespan::get-total-days(datetime::now() - datetime::parse('01/01/2000'))))}" />

    <!-- platform specific properties. These are the defaults -->
    <property name="current.build.defines" value="${build.defines}" />

    <!-- Build Tasks -->
    <target name="init" description="Initializes build properties">
        <property name="build.dir" value="${project::get-base-directory()}\build" />
        <echo message="Build Directory is ${build.dir}" />
    </target>

    <target name="clean" depends="init" description="Deletes current build configuration">
        <echo message="Clearing out files before recompiling..." />
        <delete verbose="true">
            <fileset basedir="${build.dir}">
                <include name="TestApp*.exe" />
            </fileset>
        </delete>
    </target>

    <target name="build" depends="clean" description="Perform a build of the base TestApp product">
        <mkdir dir="${build.dir}" unless="${directory::exists(build.dir)}" />

        <!-- Actually compile VB6 project into executable -->
        <vb6 project="TestApp.vbp" outdir="${build.dir}" errorfile="TestApp.build.err" verbose="true" />
    </target>
</project>

あなたの助けは大歓迎です!

4

1 に答える 1

1

私はあなたの質問を誤解しているかもしれませんので、ご容赦ください。CCNetのnantタスクは、ローカルマシン(CCNetを実行しているマシン)で動作します。

ToolBoxがCCNetを実行しているが、BuildMasterがすべてのツール(つまり、VB6など)を実行している場合、試行されていることを実行する方法はないと確信しています。通常、CCNetは、実際にビルドを実行するマシンで実行する必要があります。したがって、VB6が見つからないのは、VB6がToolBoxにインストールされていないためです。

ただし、CCNetには、1つから複数のビルドサーバーを監視/制御する方法があります。したがって、あなたの場合、BuildMasterのビルドを制御するようにToolBoxを構成できますが、CCNetを両方にインストールする必要があります。このようなもののリファレンスについては、CCNetのサイトでビルドの分割を確認できます。

于 2008-12-18T15:53:50.230 に答える