Frage

Ich habe CruiseControl.NET Version 1.4 auf meinem Entwicklungsserver eingerichtet.Immer wenn ein Entwickler Code eincheckt, führt er eine Kompilierung durch.

Jetzt sind wir an einem Punkt angelangt, an dem wir beginnen können, unsere Bewerbung den Testern zu übergeben.Wir möchten ClickOnce zum Verteilen der Anwendung verwenden. Die Idee dabei ist, dass ein Tester, wenn er die Anwendung testet, über den neuesten Build verfügt.

Ich kann mit CruiseControl.NET keine Möglichkeit finden, dies zu erreichen.Wir verwenden MSBUILD, um die Builds durchzuführen.

War es hilfreich?

Lösung 2

Vielen Dank für all die Hilfe.Die endgültige Lösung, die wir implementiert haben, hat von jeder Antwort etwas in Anspruch genommen.

Wir fanden es einfacher, mit einfachen Batchdateien mit mehreren Umgebungen zu arbeiten.Ich behaupte nicht, dass dies der beste Weg ist, aber für unser gegebenes Szenario und unsere Anforderungen hat dies gut funktioniert.Ergänzen Sie „Projekt“ durch Ihren Projektnamen und „Umgebung“ durch den Namen Ihrer Umgebung (dev, test, stage, Production, was auch immer).

Hier ist der Aufgabenbereich unserer Datei „ccnet.config“.

<!-- override settings  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\CopySettings.bat</executable>
</exec>

<!-- compile -->
<msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
    <workingDirectory>F:\Source\Project\Environment\</workingDirectory>
    <projectFile>Project.sln</projectFile>
    <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
    <targets>Rebuild</targets>
    <timeout>0</timeout>
    <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>

<!-- clickonce publish  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\Publish.bat</executable>
</exec>

Das erste, was Sie bemerken werden, ist, dass CopySettings.bat ausgeführt wird.Dadurch werden bestimmte Einstellungen für die Umgebung kopiert, beispielsweise Datenbankverbindungen.

Als nächstes wird die Standardaufgabe MSBUILD ausgeführt.Eventuelle Kompilierungsfehler werden hier abgefangen und wie gewohnt behandelt.

Als letztes muss Publish.bat ausgeführt werden.Dadurch wird tatsächlich erneut ein MSBUILD-„Neuaufbau“ über die Befehlszeile durchgeführt, und Parameter von CruiseControl werden automatisch übergeben und erstellt.Als nächstes wird MSBUILD für das Ziel „publish“ aufgerufen.Der Veröffentlichung werden genau dieselben Parameter zugewiesen wie bei der Neuerstellung.Dadurch bleiben die Build-Nummern synchron.Außerdem sind unsere ausführbaren Dateien anders benannt (z. B.- ProjectDev und ProjectTest).Am Ende haben wir unterschiedliche Versionsnummern und Namen, und so kann ClickOnce seine Aufgabe erfüllen.

Der letzte Teil von Publish.bat kopiert die eigentlichen Dateien in ihr neues Zuhause.Wir verwenden die Datei „publish.htm“ nicht, da sich alle unsere Benutzer im Netzwerk befinden. Wir geben ihnen lediglich eine Verknüpfung zur Manifestdatei auf ihrem Desktop und sie können darauf klicken und immer die richtige ausführbare Datei mit einer entsprechenden Versionsnummer ausführen Tempomat.

Hier ist CopySettings.bat

XCOPY "F:\Source\Project\Environment\CruiseControl\Project\app.config" "F:\Source\Project\Environment\Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.Designer.vb" "F:\Source\Project\Environment\Project\My Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.settings" "F:\Source\Project\Environment\Project\My Project" /Y /I /R

Und schließlich gibt es hier Publish.bat

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:rebuild "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationRevision=%CCNetLabel% /property:AssemblyName="ProjectEnvironment" /property:PublishUrl="\\Server\bin\Project\Environment\\"
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:publish "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationVersion="1.0.0.%CCNetLabel%" /property:AssemblyVersion="1.0.0.%CCNetLabel%" /property:AssemblyName="ProjectEnvironment" 

XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish" "F:\Binary\Project\Environment" /Y /I
XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish\Application Files" "F:\Binary\Project\Environment\Application Files" /Y /I /S

Wie gesagt, es ist wahrscheinlich nicht so gemacht, wie es die CruiseControl- und MSBUILD-Entwickler geplant hatten, aber es funktioniert.Wenn Sie dies gestern zum Laufen bringen müssen, ist dies möglicherweise die Lösung, nach der Sie suchen.Viel Glück!

Andere Tipps

Wir haben dies getan und können Ihnen einige Hinweise für den Anfang geben.

2 Dinge, die Sie beachten sollten:

  • MSBuild kann die erforderlichen Bereitstellungsdateien für Sie generieren.
  • MSBuild stellt die Dateien nicht auf der FTP- oder UNC-Freigabe bereit.Hierfür benötigen Sie einen separaten Schritt.

Um MSBuild zum Generieren der ClickOnce-Manifeste zu verwenden, müssen Sie den folgenden Befehl ausgeben:

msbuild /target:publish /p:Configuration=Release /p:Platform=AnyCPU; "c:\yourProject.csproj"

Dadurch wird MSBuild angewiesen, Ihr Projekt zu erstellen und ClickOnce-Bereitstellungsdateien darin zu generieren bin elease\YourProject.publish Verzeichnis.

Jetzt müssen Sie diese Dateien nur noch auf die FTP-/UNC-Freigabe oder wo auch immer kopieren, und schon kann es losgehen.

Sie können CruiseControl.NET anweisen, mit diesen MSBuild-Parametern zu erstellen.

Anschließend benötigen Sie einen CruiseControl.NET-Build-Task, um die generierten Bereitstellungsdateien auf die FTP- oder UNC-Freigabe zu kopieren.Wir verwenden hierfür ein benutzerdefiniertes kleines C#-Konsolenprogramm, Sie können aber genauso gut ein Powershell-Skript verwenden.

Ich erinnere mich, dass ich dies letztes Jahr für ein ClickOnce-Projekt getan habe, an dem ich gearbeitet habe.Ich erinnere mich, dass es ewig gedauert hat, bis ich es herausgefunden habe, aber hier ist es.Ich wollte, dass meine Skripte ein anderes Installationsprogramm generieren, das auf unsere Entwicklungsumgebung verweist, und ein anderes für Produkt.Darüber hinaus brauchte ich es, um die richtigen Versionsinformationen einzufügen, damit die bestehenden Clients „erkennen“, dass es eine neue Version gibt, und das ist der Sinn von clickOnce.In diesem Skript müssen Sie durch Ihre eigenen Servernamen usw. ersetzen.Der Trick besteht darin, die Dateien „publish.htm“ und „project.publish“ zu speichern und die neue Versionsnummer basierend auf der Version einzufügen, die Ihnen von CC.NET bereitgestellt wird.

So sah mein Build-Skript aus:

<target name="deployProd">
  <exec program="<framework_dir>\msbuild.exe" commandline="<project>/<project>.csproj /property:Configuration=PublishProd /property:ApplicationVersion=${build.label}.*;PublishUrl=\\<prod_location>\binups$\;InstallUrl=\\<prod_location>\binups$\;UpdateUrl=\\<prod_location>\binups$\;BootstrapperComponentsUrl=\\<prod_location>\prereqs$\ /target:publish"/>

  <copy todir="<project>\bin\PublishProd\<project>.publish">

    <fileset basedir=".">
      <include name="publish.htm"/>
    </fileset>

    <filterchain>
      <replacetokens>
        <token key="CURRENT_VERSION" value="${build.label}"/>
      </replacetokens>
     </filterchain>
  </copy>

</target>

Hoffe das hilft

Es wäre eine große Verbesserung, einfach ${CCNetLabel} in der msbuild-Aufgabe CCNET.config übergeben zu können.

Sie möchten die ClickOnce-Manifestgenerierungsaufgaben in msbuild verwenden.Der Prozess ist etwas langwierig, deshalb verweise ich Sie nur auf ein paar Links.Hier ist das Referenz auf msdn und ein Beispielartikel um Ihnen hoffentlich den Einstieg zu erleichtern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top