Pregunta

Fondo

Estoy armando un sistema de integración continua en el trabajo sobre dos máquinas virtuales que se ejecutan en el escritorio local. VM # 1 ( Herramientas ) se está ejecutando CruiseControl.Net, Subversion, BugTracker.Net y SQL Server Express. VM # 2 ( buildmaster ) se está ejecutando de NAnt con NAntContrib y tiene VB 6.0 e instalado el 1.0 / 1.1 / 2.0 / 3.5 SDK .NET Framework. La intención es controlar estrictamente lo que está instalado en buildmaster y ser mucho más flexible en la caja de herramientas y desarrolladores estaciones de trabajo.

edición

Yo tenía un proyecto CCNet en la caja de herramientas que compiló con éxito una aplicación de prueba de VB 6.0 en buildmaster, pero la construcción no empecé la semana pasada. Lo único que recuerdo haber hecho era instalar BugTracker.Net y SQL Server Express en la caja de herramientas.

Los síntomas

La generación falla y devuelve una excepción:

<![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>

Obviamente, la carne de la excepción es [CDATA [ 'VB6' no se pudo iniciar.]] . Mi problema es que cuando corro la acumulación Nant directamente en buildmaster se completa la construcción con éxito cada vez.

En aras de la exhaustividad, aquí está mi script de NAnt construcción:

<?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>

Su ayuda es muy apreciada!

¿Fue útil?

Solución

Yo podría estar malinterpretando su pregunta al descubierto así que por favor conmigo. CCNet de Nant operatates de trabajo en la máquina local (la máquina que ejecuta CCNet).

Si Toolbox está ejecutando CCNet pero buildmaster está en marcha todas las herramientas (es decir, VB6, etc), estoy bastante seguro de que no hay manera de hacer lo que se intentó. En general, CCNet debe estar en ejecución en la máquina actual ejercicio de las compilaciones. Por lo tanto, el hecho de que VB6 no se puede encontrar es porque VB6 no está instalado en caja de herramientas.

Sin embargo, CCNet tiene una manera de supervisar / controlar múltiples servidores construcción de una. Por lo que en su caso podría configurar caja de herramientas para el control de buildmaster construye, pero CCNet tendría que ser instalado en ambos . Para una referencia en algo como esto se puede extraer La división de la creación en el sitio de CCNet.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top