Usando CruiseControl para copyr la carpeta SVN principal a una carpeta Release

Estoy empezando con CruiseControl.NET y nAnt y realmente no entiendo muy bien cómo funciona todo el process. Actualmente, tenemos la mayoría de nuestras soluciones en Visual Source 'Safe' y hacemos que el server de compilation etiquete cada versión de manera automática utilizando el file AssemblyInfo.

Estamos migrando nuestros proyectos VSS a SVN, y hemos modificado los files de compilation del proyecto en consecuencia para verificar y actualizar los repositorys SVN. Lo que queremos lograr es tener una copy de la fuente en el control de fuente, que coincida exactamente con la versión del proyecto que se está implementando.

Nuestro SVN está configurado así:

svn://solution/ TRUNK/ RELEASES/ 1.0.0/ 1.2.0/ BRANCHES/ 

Entonces, cuando forzamos la construcción de nuestra solución, con su versión de assemblyinfo configurada como 1.3.0, queremos que el server de compilation copie el directory TRUNK, en el directory RELEASES / 1.3.0 /.

El command SVN es bastante simple. svn copy src / directory dst / directory. Pero, ¿dónde pondría este command y cómo obtengo el número de versión del destino?

En el server de compilation, este es un ejemplo de un file .xml:

  <sourcecontrol type="svn"> <trunkUrl>svn://project/trunk</trunkUrl> <workingDirectory>D:\Builds\project\Src</workingDirectory> <executable>C:\Subversion\bin\svn.exe</executable> <username>sf_service_dev</username> <password>SFx4vi-r</password> <tagOnSuccess>true</tagOnSuccess> <cleanCopy>true</cleanCopy> </sourcecontrol> 

En el file .build del proyecto tenemos esto (y mucho más por supuesto):

 <target name="Deploy_Release"> <property name="fileandpathformyfile" value="${CCNetWorkingDirectory}\Bin\project.exe"/> <echo message="fileandpathformyfile is ${fileandpathformyfile}."/> <property name="ReleaseNumber" value="${fileversioninfo::get-file-version(fileversioninfo::get-version-info(fileandpathformyfile))}"/> <echo message="ReleaseNumber has been detected to be ${ReleaseNumber}."/> <!--Use version as needed--> <!--Create the release direcory--> <mkdir dir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"/> <!--Copy stuff to the release directory--> <copy todir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"> <fileset basedir="${CCNetWorkingDirectory}\bin"> <include name="*.dll" /> <include name="*.exe" /> <include name="*.config" /> <include name="*.xml" /> <include name="*.stp" /> </fileset> </copy> </target> 

Ahora, si quiero ejecutar un command SVN para copyr $ {trunkURL} en $ {trunkURL} /../ releases / $ {ReleaseNumber}, ¿cómo lo haría y en qué file iría? Cómo lo entiendo en este momento, o necesitamos get el ReleaseNumber del file .build, en el file .xml, y ejecutar un file desde allí. O bien, tenemos que pasar el trunkURL de .XML a .build y ejecutar un command svn desde el file .build.

¡Por favor ayuda!

Una opción es labelr (también conocido como svn copy) en cada compilation exitosa. En realidad, hay una funcionalidad incorporada para esto.

veo que tiene <tagOnSuccess> habilitado verdadero

también debe establecer <tagBaseUrl>svn://project/trunk/Releases</tagBaseUrl> o <tagBaseUrl>svn://project/trunk/Tags</tagBaseUrl>

El problema que puede tener con esto es cada compilation exitosa, ya sea forzada o continua. Supongo que no quiere copyr para liberar cada compilation.

Lo que podrías hacer es

  1. ejecutar un file por lotes con la tarea nAnt exec
  2. escriba una instrucción if que compruebe la variable de entorno %CCNetRequestSource% para ForceBuild
  3. CCNetWorkingDirectory operación svn en la línea de command ( CCNetWorkingDirectory estará disponible como variable de entorno, puede que tenga que pasar el lanzamiento # como parámetro)

También podría marcar nantcontrib, parece tener una tarea svn

EDITAR

Es posible que desee ver el CC.Net administrando su versión # a través de una labeldora y pasándolo a nAnt a través de la variable de entorno CCNetLabel . Por lo que he leído, lo más probable es que desee la labeldora de files porque los demás auto generan una label para usted, yo personalmente uso la labeldora de iteración.

La ventaja de usar el labeldor CC.Net para el control de versiones es que los correos electrónicos de compilation muestran la versión de lanzamiento correcta, y creo que <tagOnSuccess> usa la label para el nombre del directory.