Como sincronizo o número de revisão do SVN com meu site ASP.NET?

93

O Stack Overflow tem um número de versão de subversão na parte inferior:

revisão svn: 679

Quero usar esse controle de versão automático com meus .NET Web Site/Applicationprojetos / soluções do Windows Forms e WPD.

Como faço para implementar isso?

Zack Peterson
fonte
@Balloon Se você estiver usando TortoiseSVN, você pode usar o programa SubWCRev empacotado . Ele consulta uma cópia de trabalho e informa apenas o número de revisão mais alto. Admitidamente, esta parece ser uma abordagem do lado do cliente para um problema do lado do servidor, mas como é um bom programa de linha de comando, você deve ser capaz de capturar sua saída para uso com bastante facilidade.
nickf
Se você não estiver usando TortoiseSVN para SubWCRev como eu disse aqui , você pode usar svnversion, que faz a mesma coisa.
nickf

Respostas:

31

Parece que Jeff está usando CruiseControl.NET com base em algumas folhinhas nas transcrições de podcast. Isso parece ter recursos de implantação automatizados do controle de origem à produção. Pode ser aqui que a inserção está acontecendo?

saint_groceon
fonte
2
Se você não estiver usando CruiseControl.Net, verifique minha resposta (plugue sem vergonha!) - stackoverflow.com/questions/163/… ; o)
Andrew
link quebrado @saint_groceon
Cacho Santa
27

Fazemos isso com xUnit.net para nossas compilações automatizadas. Nós usamos CruiseControl.net(e estamos testando o TeamCity). A tarefa MSBuild que executamos para integração contínua altera automaticamente o número de compilação para nós, de forma que o arquivo ZIP de compilação resultante contenha um conjunto de DLLs e EXEs com versão adequada.

Nosso arquivo MSBuild contém uma referência UsingTask para uma DLL que faz substituições de expressões regulares: (você pode usar esta DLL, pois também é coberta pela licença MS-PL)

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

Em seguida, extraímos o número do build, que é fornecido automaticamente pelo sistema de CI. Você também pode fazer com que seu provedor de controle de fonte forneça o número de revisão da fonte, se quiser, mas descobrimos que o número da versão no sistema de CI era mais útil, porque não só pode ver os resultados da integração pelo número da versão de CI, que também fornece um vincule de volta ao (s) changeset (s) que foram incluídos na construção.

 <! - Tentativas em cascata de encontrar um número de compilação ->

 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </BuildNumber>
 </PropertyGroup>

(Tentamos BUILD_NUMBER, que é do TeamCity, depois ccnetlabel, que é do CC.net, e se nenhum estiver presente, o padrão é 0, para que possamos testar o script de construção automatizado manualmente.)

Em seguida, temos uma tarefa que define o número da compilação em um arquivo GlobalAssemblyInfo.cs que vinculamos a todos os nossos projetos:

 <Target Name = "SetVersionNumber">
   <RegexReplace
       Padrão = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Replacement = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       Files = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attribute -r xunit.installer \ App.manifest" />
 </Target>

Isso localiza o atributo AssemblyVersion e substitui o número da versão abcd por abcBuildNumber. Normalmente deixaremos o código-fonte verificado na árvore com as três primeiras partes do número do construtor corrigidas e a quarta no zero (por exemplo, hoje é 1.0.2.0).

Em seu processo de construção, certifique-se de que a tarefa SetVersionNumber preceda sua tarefa de construção. No final, usamos nossa tarefa Zip para compactar os resultados da compilação de forma que tenhamos um histórico dos binários para cada compilação automatizada.

Brad Wilson
fonte
25

Você pode fazer isso adicionando o seguinte em qualquer lugar do seu código

$Id:$

Por exemplo, @Jeff fez:

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

e quando verificado no servidor, substituiu $ Id: $ pelo número da revisão atual. Eu também encontrei essa referência .

Também há $ Date: $ , $ Rev: $ , $ Revision: $

Nick Berardi
fonte
Você precisa ter certeza de que os Arquivos possuem o Atributo svn: keywords definido também, caso contrário, $ Id $ etc. não são substituídos automaticamente. Veja esta página. (Role para baixo até svn: palavras-chave)
Michael Stum
1
Acabei de tentar isso usando $ Rev $ e funciona - até certo ponto. O problema é que ele parece apenas atualizar a palavra-chave quando o arquivo em que ela aparece é alterado. Isso significa que se forem feitas alterações no projeto que não afetem o arquivo com $ Rev $ nele (no meu caso, minha página mestra ASP.NET), o projeto terá uma revisão superior à exibida para o usuário . Alguém tem alguma opinião sobre isso? Existe uma maneira de fazer com que o SVN sempre atualize as palavras-chave no arquivo?
Chris Roberts
5
Isso não vai apenas inserir o número de revisão da última alteração nesse arquivo específico? Tentei configurar um repositório de dois arquivos e alterei um, tentei exportar e verificar, e o outro arquivo permaneceu em 1 em ambos os casos.
Lasse V. Karlsen,
lassevk está correto, isso só muda quando o próprio arquivo muda.
Bruno Lopes
Usando VisualSVN e TortoiseSVN, adicionar $ Id: $ apenas fez com que a página renderizasse "$ Id: $". Pode ser útil observar em qual servidor / cliente esta resposta funciona.
Travis
17

Se você estiver usando ASP.Net MVC(como o StackOverflow faz), escrevi um guia de 3 etapas fácil de seguir sobre como obter e exibir automaticamente a revisão mais recente do SVN . O guia foi inspirado por pensar comigo mesmo sobre essa questão! : o)

Andrew
fonte
Parece ótimo, mas o link está quebrado!
Peter C
1
Esta foi uma ótima solução para automatizarmos a exibição de versões com base em nossas revisões de SVN. Uma vantagem é que ele não requer uma chamada para o servidor SVN.
Ben Elder
o link está quebrado ou o site está fora do ar
Cacho Santa
1
Obrigado @cacho, consertado - era uma falha do servidor [sic]; o)
Andrew
10

@Balloon Se você estiver usando TortoiseSVN, você pode usar o programa SubWCRev empacotado . Ele consulta uma cópia de trabalho e informa apenas o número de revisão mais alto. Admitidamente, esta parece ser uma abordagem do lado do cliente para um problema do lado do servidor, mas como é um bom programa de linha de comando, você deve ser capaz de capturar sua saída para uso com bastante facilidade.

nickf
fonte
9

$reve outros semelhantes são revisões de arquivos individuais, portanto, não serão alterados a menos que o arquivo seja alterado. O número na página da web é (provavelmente, estou assumindo aqui) o número da revisão svn para todo o projeto. Isso é diferente das revisões de arquivo, que outros têm apontado.

Neste caso, presumo que CCNET está puxando o número de revisão do projeto e reescrevendo uma parte da página da Web com esse número. Qualquer solução de CI deve ser capaz de fazer isso, configure-o sozinho com CCNET e Teamcity (embora não sejam páginas da web, mas controle automático de versões de implantação / montagem).

Para fazer isso, use uma solução de CI que a suporte ou use seu processo de construção (MSbuild / Nant) para armazenar essa versão e gravá-la nos arquivos antes de "implantá-la".

James Pogran
fonte
5

Para adicionar à resposta de @BradWilson: "Você também pode fazer com que seu provedor de controle de fonte forneça o número de revisão da fonte, se desejar"

Para conectar o Subversion e o MSBuild: Projeto de Tarefas da Comunidade MSBuild

jan
fonte