Domanda

Sfondo

Sto mettendo insieme un sistema Continuous Integration al lavoro su due macchine virtuali in esecuzione sul mio desktop locale. VM # 1 ( Strumenti ) è in esecuzione CruiseControl.Net, Subversion, BugTracker.Net e SQL Server Express. VM # 2 ( BuildMaster ) è in esecuzione NAnt con NAntContrib e ha VB 6.0 ed i 1.0 / 1.1 / 2.0 / 3.5 SDK Net Framework installato. L'intento è quello strettamente controllare ciò che è installato sul BuildMaster ed essere molto più flessibile sulle workstation Toolbox e sviluppatori.

Problema

Ho avuto un progetto CCNet su Toolbox che compilato un test di applicazione VB 6.0 su BuildMaster, ma la build iniziato in mancanza di settimana scorsa. L'unica cosa che ricordo di aver fatto è stato installare BugTracker.Net e SQL Server Express su Casella degli strumenti.

Sintomi

La build non riesce e restituisce un'eccezione:

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

Ovviamente, la carne della eccezione è [CDATA [ 'VB6' non è stato avviato.]] . Il mio problema è che quando faccio funzionare l'accumulo Nant direttamente sul BuildMaster che completa la formazione con successo ogni volta.

Per ragioni di completezza, ecco il mio script NAnt costruire:

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

Il vostro aiuto è molto apprezzato!

È stato utile?

Soluzione

Potrei essere interpretando male la tua domanda quindi per favore nudo con me. CCNet di Nant operatates attività sulla macchina locale (la macchina che esegue CCNet).

Se Toolbox è in esecuzione CCNet ma BuildMaster è in funzione tutti gli strumenti (vale a dire VB6, ecc), sono abbastanza sicuro che non c'è modo di fare ciò che è stato tentato. Generalmente, CCNet deve essere in esecuzione sul computer che effettua le generazioni. Di conseguenza, il fatto che VB6 non può essere trovato perché VB6 non è installato sulla cassetta portautensili.

Tuttavia, CCNet ha un modo per monitorare / controllare più server costruire da uno. Quindi nel tuo caso è possibile configurare Casella degli strumenti per controllare BuildMaster di costruisce, ma CCNet avrebbe bisogno di essere installato su entrambi . Per un riferimento a qualcosa di simile è possibile controllare le Dividere la build sul sito di CCNet.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top