NAnt / NAntContrib 'VB6' не удалось запустить при удаленной сборке - PullRequest
2 голосов
/ 17 декабря 2008

Фон

Я собираю систему непрерывной интеграции на работе на двух виртуальных машинах, работающих на моем локальном рабочем столе. Виртуальная машина №1 ( Toolbox ) работает под управлением CruiseControl.Net, Subversion, BugTracker.Net и SQL Server Express. Виртуальная машина № 2 ( BuildMaster ) работает под управлением NAnt с NAntContrib и имеет VB 6.0 и установленные SDK 1.0 / 1.1 / 2.0 / 3.5 .Net Framework. Намерение состоит в том, чтобы жестко контролировать то, что установлено на BuildMaster и быть намного более свободным на Toolbox и рабочих станциях разработчиков.

Выпуск

У меня был проект CCNet на Toolbox, который успешно скомпилировал тестовое приложение VB 6.0 на BuildMaster, но сборка начала давать сбой на прошлой неделе. Единственное, что я помню, это установил BugTracker.Net и SQL Server Express на Toolbox.

Симптомы

Сборка завершается неудачно и возвращает исключение:

<![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' не удалось запустить.]] . Моя проблема в том, что когда я запускаю сборку 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>

Ваша помощь очень ценится!

1 Ответ

1 голос
/ 18 декабря 2008

Возможно, я неверно истолковал ваш вопрос, поэтому, пожалуйста, держитесь со мной Задача CCNet nant выполняется на локальной машине (машине, на которой работает CCNet).

Если ToolBox работает с CCNet, но BuildMaster запускает все инструменты (т.е. VB6 и т. Д.), Я вполне уверен, что нет способа сделать то, что делается. Как правило, CCNet должен быть запущен на компьютере, который выполняет сборку. Следовательно, тот факт, что VB6 не может быть найден, объясняется тем, что VB6 не установлен в ToolBox.

Однако в CCNet есть способ мониторинга / управления несколькими серверами сборки с одного. Таким образом, в вашем случае вы можете настроить ToolBox для управления сборками BuildMaster, но CCNet необходимо установить на оба . Для справки о чем-то подобном вы можете проверить Разделение сборки на сайте CCNet.

...