¿Cómo sincronizo el número de revisión SVN con mi sitio web ASP.NET?

93

Stack Overflow tiene un número de versión de subversión en la parte inferior:

revisión svn: 679

Quiero utilizar este control de versiones automático con mis .NET Web Site/Applicationproyectos / soluciones de Windows Forms y WPD.

¿Cómo implemento esto?

Zack Peterson
fuente
@Balloon Si está usando TortoiseSVN, puede usar el programa SubWCRev empaquetado . Consulta una copia de trabajo y le indica solo el número de revisión más alto. Es cierto que este parece ser un enfoque del lado del cliente para un problema del lado del servidor, pero dado que es un buen programa de línea de comandos, debería poder capturar su salida para su uso con bastante facilidad.
nickf
Si no está usando TortoiseSVN para SubWCRev como dije aquí , puede usar svnversion que hace lo mismo.
nickf

Respuestas:

31

Parece que Jeff está usando CruiseControl.NET basándose en algunas ojeadas las transcripciones del podcast. Esto parece tener capacidades de implementación automatizadas desde el control de fuente hasta la producción. ¿Podría ser aquí donde está ocurriendo la inserción?

saint_groceon
fuente
2
Si no está utilizando CruiseControl.Net, consulte mi respuesta (¡enchufe desvergonzado!) - stackoverflow.com/questions/163/… ; o)
Andrew
enlace roto @saint_groceon
Cacho Santa
27

Hacemos esto con xUnit.net para nuestras compilaciones automatizadas. Usamos CruiseControl.net(y estamos probando TeamCity). La tarea de MSBuild que ejecutamos para la integración continua cambia automáticamente el número de compilación por nosotros, por lo que el archivo ZIP de compilación resultante contiene un conjunto de DLL y EXE con las versiones adecuadas.

Nuestro archivo MSBuild contiene una referencia de UsingTask para una DLL que reemplaza expresiones regulares: (puede usar esta DLL, ya que también está cubierta por la licencia MS-PL)

  <UsingTask
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

A continuación, extraemos el número de compilación, que el sistema CI proporciona automáticamente. También puede hacer que su proveedor de control de fuente proporcione el número de revisión de la fuente si lo desea, pero encontramos que el número de compilación en el sistema de CI era más útil, porque no solo puede ver los resultados de integración por el número de compilación de CI, sino que también proporciona un enlace de nuevo a los conjuntos de cambios que se incluyeron en la compilación.

 <! - Intentos en cascada de encontrar un número de compilación ->

 <Condición del grupo de propiedades = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </BuildNumber>
 </PropertyGroup>
 <Condición del grupo de propiedades = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </BuildNumber>
 </PropertyGroup>
 <Condición del grupo de propiedades = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </BuildNumber>
 </PropertyGroup>

(Probamos BUILD_NUMBER, que es de TeamCity, luego ccnetlabel, que es de CC.net, y si ninguno está presente, usamos 0 por defecto para poder probar el script de compilación automatizado manualmente).

A continuación, tenemos una tarea que establece el número de compilación en un archivo GlobalAssemblyInfo.cs que vinculamos a todos nuestros proyectos:

 <Nombre de destino = "SetVersionNumber">
   <RegexReplace
       Patrón = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Reemplazo = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       Archivos = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </Target>

Esto busca el atributo AssemblyVersion y reemplaza el número de versión abcd con abcBuildNumber. Por lo general, dejaremos la fuente marcada en el árbol con las primeras tres partes del número de constructor fijo y la cuarta en cero (fe, hoy es 1.0.2.0).

En su proceso de compilación, asegúrese de que la tarea SetVersionNumber precede a su tarea de compilación. Al final, usamos nuestra tarea Zip para comprimir los resultados de la compilación de modo que tengamos un historial de los binarios para cada compilación automatizada.

Brad Wilson
fuente
25

Puede hacerlo agregando lo siguiente en cualquier lugar de su código

$Id:$

Entonces, por ejemplo, @Jeff hizo:

<div id="svnrevision">svn revision: $Id:$</div>

y cuando se registró en el servidor reemplazó $ Id: $ con el número de revisión actual. También encontré esta referencia .

También hay $ Fecha: $ , $ Rev: $ , $ Revisión: $

Nick Berardi
fuente
Debe asegurarse de que los archivos también tengan el atributo svn: keywords establecido, de lo contrario, $ Id $, etc.no se reemplazan automáticamente. Vea esta página. (Desplácese hacia abajo hasta svn: palabras clave)
Michael Stum
1
Acabo de probar esto usando $ Rev $ y funciona, hasta cierto punto. El problema es que parece que solo actualiza la palabra clave cuando se cambia el archivo en el que aparece. Esto significa que si se realizan cambios en el proyecto que no afectan el archivo con $ Rev $ en él (en mi caso, mi página maestra ASP.NET), el proyecto tendrá una revisión superior a la que se muestra al usuario. . ¿Alguien tiene alguna idea sobre esto? ¿Hay alguna manera de hacer que SVN actualice siempre las palabras clave en el archivo?
Chris Roberts
5
¿No insertará simplemente el número de revisión del último cambio en ese archivo en particular? Intenté configurar un repositorio de dos archivos y cambié uno, y probé tanto la exportación como el pago, y el otro archivo se mantuvo en 1 en ambos casos.
Lasse V. Karlsen
lassevk es correcto, esto solo cambia cuando cambia el archivo.
Bruno Lopes
Usando VisualSVN y TortoiseSVN, agregar $ Id: $ solo hizo que la página mostrara "$ Id: $". Puede ser útil tener en cuenta en qué servidor / cliente funciona esta respuesta.
Travis
17

Si está utilizando ASP.Net MVC(como lo hace StackOverflow), he escrito una guía de 3 pasos fácil de seguir sobre cómo obtener y mostrar automáticamente la última revisión de SVN . ¡La guía se inspiró pensando en mí mismo sobre esta misma pregunta! : o)

Andrés
fuente
Suena genial, ¡aunque Link roto!
Peter C
1
Esta fue una gran solución para nosotros para automatizar la visualización de versiones basadas en nuestras revisiones de SVN. Una ventaja es que no requiere una llamada a su servidor SVN.
Ben Elder
enlace roto o sitio inactivo
Cacho Santa
1
Gracias @cacho, arreglado - fue una falla del servidor [sic]; o)
Andrew
10

@Balloon Si está usando TortoiseSVN, puede usar el programa SubWCRev empaquetado . Consulta una copia de trabajo y le indica solo el número de revisión más alto. Es cierto que este parece ser un enfoque del lado del cliente para un problema del lado del servidor, pero dado que es un buen programa de línea de comandos, debería poder capturar su salida para su uso con bastante facilidad.

nickf
fuente
9

$revy otros similares son revisiones para los archivos individuales, por lo que no cambiarán a menos que el archivo cambie. El número en la página web es (lo más probable, supongo que aquí) el número de revisión svn para todo el proyecto. Eso es diferente a las revisiones de archivos, a las que otros han apuntado.

En este caso, supongo que CCNET está extrayendo el número de revisión del proyecto y reescribiendo una parte de la página web con ese número. Cualquier solución de CI debería poder hacer esto, configuré esto yo mismo con CCNET y Teamcity (aunque no páginas web, sino versiones automáticas de versiones de implementación / ensamblaje).

Para que pueda hacer esto, use una solución de CI que lo admita, o use su proceso de compilación (MSbuild / Nant) para almacenar esa versión y escribirla en los archivos antes de "implementarla".

James Pogran
fuente
5

Para agregar a la respuesta de @ BradWilson: "También puede hacer que su proveedor de control de fuente proporcione el número de revisión de la fuente si lo desea"

Para conectar Subversion y MSBuild: Proyecto de tareas de la comunidad de MSBuild

ene
fuente