Pergunta

Eu CruiseControl.NET a Versão 1.4 configurar meu servidor de desenvolvimento.Sempre que um desenvolvedor verifica no código, ele faz uma compilação.

Agora estamos em um lugar onde podemos começar a dar o nosso aplicativo para os testadores.Nós gostaríamos de usar o ClickOnce para distribuir o aplicativo, com a idéia de que quando um testador vai para testar o aplicativo, eles têm a compilação mais recente.

Eu não consigo encontrar uma maneira de fazer isso acontecer com CruiseControl.NET.Estamos usando o MSBUILD para executar compilações.

Foi útil?

Solução 2

Obrigado por toda a ajuda.A solução final foi implementado tomou um pouco de cada resposta.

Descobrimos que é mais fácil para lidar trabalhar com múltiplos ambientes, através de simples arquivos de lote.Eu não estou sugerindo que esta é a melhor maneira de fazer isso, mas para o nosso cenário e requisitos, isso funcionou bem.Suplemento de "Projeto" com o nome do projeto e "meio Ambiente" com o seu nome de ambiente (desenvolvimento, teste, fase de produção, o que for).

Aqui é a área tarefas da nossa "ccnet.configuração de arquivo".

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

A primeira coisa que você vai notar é que CopySettings.morcego é executado.Este cópias configurações específicas para o ambiente, tais como conexões de banco de dados.

Ao lado, o padrão de MSBUILD tarefa é executada.Quaisquer erros de compilação são apanhados aqui e tratado como normal.

A última coisa de que a execução é Publicar.morcego.Este, na verdade, realiza um MSBUILD "reconstruir" novamente a partir da linha de comandos e parâmetros do Administrador são automaticamente transmitidos e construídos.Ao lado, o MSBUILD é chamado de "publicar" do alvo.Os exatos mesmos parâmetros são fornecidos para publicação como a reconstrução foi emitido.Isso mantém os números de compilação em sincronia.Além disso, nossa executáveis são nomeados de forma diferente (por exemplo,- ProjectDev e ProjectTest).Vamos acabar com números de versão diferentes e nomes, e isso permite que o ClickOnce para fazer a sua coisa.

A última parte da Publicação.bat copia os arquivos reais para suas novas casas.Nós não usamos o publish.htm como todos os nossos clientes estão na rede, podemos apenas dar-lhes um atalho para o arquivo de manifesto no seu ambiente de trabalho e eles podem clicar e sempre estar executando o executável correto, com um número de versão que laços em Administrador.

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

E por fim, aqui está a Publicar.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

Como eu disse, ele provavelmente não será feito da maneira que o Administrador e o MSBUILD desenvolvedores tinham intenção de que as coisas funcionem, mas funciona.Se você precisa para começar este trabalho de ontem, pode ser a solução que você está procurando.Boa sorte!

Outras dicas

Nós fizemos isso e pode dar-lhe algumas dicas para começar.

2 coisas que você deve estar ciente:

  • MSBuild pode gerar a necessária implantação de arquivos para você.
  • MSBuild não implantar os arquivos para o FTP ou o compartilhamento UNC.Você vai precisar de uma etapa separada para isso.

Para usar o MSBuild para gerar o ClickOnce se manifesta, aqui é o comando que você precisa para o problema:

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

Que vai dizer o MSBuild para construir o seu projeto e gerar a implantação do ClickOnce arquivos dentro da bin elease\Seuprojeto.publicar diretório.

Tudo o que resta é copiar os arquivos para o FTP/compartilhamento UNC/onde quer, e está tudo pronto.

Você pode dizer CruiseControl.NET para construir usando os MSBuild parâmetros.

Você vai precisar de um CruiseControl.NET criar tarefa de implementação gerado arquivos e copiá-los para o FTP ou o compartilhamento UNC.Usamos um costume pouco C# consola de programa para isso, mas você pode facilmente usar um script do Powershell.

Eu me lembro de fazer isso no ano passado por um ClickOnce projeto que eu estava trabalhando.Lembro-me levando-me para sempre a descobrir, mas aqui está ele.O que eu queria que meus scripts para gerar um instalador diferente que apontava para a nossa dev env e um diferente para prod.Não só isso, mas eu precisava para injetar o direito de informações de controle de versão para os clientes existentes seria 'perceber' há uma nova versão lá fora, que é o ponto de clickOnce.Neste roteiro você ter que substituir com o seu próprio servidor de nomes etc.O truque é para salvar o publish.htm e projeto.publicar arquivo e inserir o novo número de versão baseado na versão que é fornecido a você por CC.NET.

Aqui é o meu script de compilação parecido com:

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

Espero que isso ajude

Apenas ser capaz de passar o ${CCNetLabel} no CCNET.config do msbuild tarefa seria uma grande melhoria.

Você deseja usar o ClickOnce manifesto tarefas de geração em msbuild.O processo é um pouco prolixo, então, eu estou indo só para apontar-lhe um par de links.Aqui é o referência no msdn e um exemplo de artigo esperamos você começar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top