【问题标题】:NAnt/NAntContrib 'VB6' failed to start on remote buildNAnt/NAntContrib 'VB6' 无法在远程构建中启动
【发布时间】:2008-12-17 20:27:32
【问题描述】:

背景

我在本地桌面上运行的两个虚拟机上构建了一个持续集成系统。 VM #1 (Toolbox) 正在运行 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.]]。我的问题是,当我直接在 BuildMaster 上运行 Nant 构建时,它每次都会成功完成构建。

为了完整起见,这是我的 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>

非常感谢您的帮助!

【问题讨论】:

    标签: vb6 continuous-integration nant nantcontrib


    【解决方案1】:

    我可能会误解您的问题,请多多包涵。 CCNet 的 nant 任务在本地机器(运行 CCNet 的机器)上运行。

    如果 ToolBox 正在运行 CCNet 但 BuildMaster 正在运行所有工具(即 VB6 等),我很确定没有办法执行正在尝试的操作。通常,CCNet 需要在实际执行构建的机器上运行。 因此,找不到VB6是因为工具箱上没有安装VB6。

    但是,CCNet 确实有一种方法可以从一个服务器监视/控制多个构建服务器。因此,在您的情况下,您可以配置 ToolBox 来控制 BuildMaster 的构建,但 CCNet 需要同时安装在两者上。有关此类内容的参考,您可以查看 CCNet 网站上的 Splitting the build

    【讨论】:

    • 这是有道理的,但是......(总是有一个但是......)它正在工作,然后我做了一些事情让它停止工作。我在 NAnt 构建脚本中添加了一个 来识别正在调用哪台计算机 NAnt,并且根据您的回答,它是在 TOOLBOX 上而不是在 BUILDMASTER 上运行的。
    • 我在 BUILDMASTER 上安装了 CruiseControl.Net 作为远程服务器,并且能够从托管在 TOOLBOX 上的网页运行所有构建。感谢您的帮助!
    • 我正在做一个类似的项目,有一个小问题:为了让系统能够编译VB6代码,是否需要安装Visual Studio 6.0,就好像它是一个开发人员一样机器,或者是否有需要在服务器上存在/注册的文件列表才能使其构建 VB6 工作?
    • 根据 VB6 任务的文档,它使用 vb6.exe。您可能需要安装最低版本的环境,但我不确定 vb6.exe 需要哪些特定文件才能正常运行。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多