Question

J'ai CruiseControl.NET version 1.4 configuré sur mon serveur de développement.Chaque fois qu'un développeur archive du code, il effectue une compilation.

Nous sommes maintenant à un point où nous pouvons commencer à soumettre notre application aux testeurs.Nous aimerions utiliser ClickOnce pour distribuer l'application, l'idée étant que lorsqu'un testeur va tester l'application, il dispose de la dernière version.

Je ne trouve pas de moyen d'y parvenir avec CruiseControl.NET.Nous utilisons MSBUILD pour effectuer les builds.

Était-ce utile?

La solution 2

Merci pour votre aide.La solution finale que nous avons mise en œuvre s'inspire un peu de chaque réponse.

Nous avons trouvé plus facile de gérer le travail avec plusieurs environnements à l’aide de simples fichiers batch.Je ne dis pas que c'est la meilleure façon de procéder, mais pour notre scénario et nos exigences donnés, cela a bien fonctionné.Complétez « Projet » avec le nom de votre projet et « Environnement » avec le nom de votre environnement (développement, test, étape, production, peu importe).

Voici la zone des tâches de notre fichier "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>

La première chose que vous remarquerez est que CopySettings.bat s'exécute.Cela copie les paramètres spécifiques de l'environnement, tels que les connexions à la base de données.

Ensuite, la tâche MSBUILD standard s'exécute.Toutes les erreurs de compilation sont détectées ici et traitées normalement.

La dernière chose à exécuter est Publish.bat.Cela effectue en fait une "reconstruction" MSBUILD à nouveau à partir de la ligne de commande, et les paramètres de CruiseControl sont automatiquement transmis et construits.Ensuite, MSBUILD est appelé pour la cible « publier ».Les mêmes paramètres exacts sont donnés à la publication lors de la publication de la reconstruction.Cela maintient les numéros de build synchronisés.De plus, nos exécutables sont nommés différemment (c'est-à-dire- ProjectDev et ProjectTest).Nous nous retrouvons avec des numéros et des noms de version différents, ce qui permet à ClickOnce de faire son travail.

La dernière partie de Publish.bat copie les fichiers réels dans leurs nouveaux emplacements.Nous n'utilisons pas le fichier submit.htm car tous nos utilisateurs sont sur le réseau, nous leur donnons simplement un raccourci vers le fichier manifeste sur leur bureau et ils peuvent cliquer et toujours exécuter le bon exécutable avec un numéro de version qui correspond à Régulateur de vitesse.

Voici 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

Et enfin, voici 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

Comme je l'ai dit, cela ne se fait probablement pas de la manière dont les développeurs de CruiseControl et MSBUILD avaient prévu que les choses fonctionnent, mais cela fonctionne.Si vous avez besoin de faire fonctionner cela hier, c'est peut-être la solution que vous recherchez.Bonne chance!

Autres conseils

Nous l'avons fait et pouvons vous donner quelques conseils pour commencer.

2 choses que vous devez savoir :

  • MSBuild peut générer les fichiers de déploiement nécessaires pour vous.
  • MSBuild ne déploiera pas les fichiers sur le partage FTP ou UNC.Vous aurez besoin d’une étape distincte pour cela.

Pour utiliser MSBuild pour générer les manifestes ClickOnce, voici la commande que vous devrez exécuter :

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

Cela indiquera à MSBuild de créer votre projet et de générer des fichiers de déploiement ClickOnce dans le bin elease\VotreProjet.publish annuaire.

Il ne reste plus qu'à copier ces fichiers sur le partage FTP/UNC/n'importe où, et vous êtes prêt.

Vous pouvez demander à CruiseControl.NET de créer en utilisant ces paramètres MSBuild.

Vous aurez ensuite besoin d'une tâche de construction CruiseControl.NET pour récupérer les fichiers de déploiement générés et les copier sur le partage FTP ou UNC.Nous utilisons pour cela un petit programme de console C# personnalisé, mais vous pouvez tout aussi bien utiliser un script Powershell.

Je me souviens avoir fait cela l'année dernière pour un projet ClickOnce sur lequel je travaillais.Je me souviens qu'il m'a fallu une éternité pour comprendre, mais le voici.Ce que je voulais que mes scripts fassent, c'était générer un programme d'installation différent qui pointait vers notre environnement de développement et un autre pour la production.Non seulement cela, mais j'en avais besoin pour injecter les bonnes informations de version afin que les clients existants « réalisent » qu'il existe une nouvelle version, ce qui est tout l'intérêt de clickOnce.Dans ce script, vous devez remplacer par vos propres noms de serveur, etc.L'astuce consiste à enregistrer les fichiers publier.htm et project.publish et à injecter le nouveau numéro de version en fonction de la version qui vous est fournie par CC.NET.

Voici à quoi ressemblait mon script de build :

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

J'espère que cela t'aides

Le simple fait de pouvoir transmettre le ${CCNetLabel} dans la tâche msbuild CCNET.config serait une grande amélioration.

Vous souhaitez utiliser les tâches de génération de manifeste ClickOnce dans msbuild.Le processus est un peu long, je vais donc simplement vous indiquer quelques liens.Voici la référence sur msdn et un exemple d'article pour, je l'espère, vous aider à démarrer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top