Jenkins para automatizar a implantação de aplicativos ASP.NET

13

Existe alguma possibilidade de automatizar / semi-automatizar implantações de aplicativos Web do ASP.NET usando o Jenkins. Pode estar em ambientes controlados ou não controlados, pois o usuário não controlado precisa inserir a ID do usuário e a senha. Estou procurando maneiras de copiar os arquivos do destino para o destino e executar scripts sql no cenário de web farm.

Editar Atualmente, estamos usando arquivos bat para xcopy / configurar o pool de aplicativos / sql cmd etc. para implantar o aplicativo. Mas, para que isso funcione, a equipe de suporte à produção precisa baixar o código-fonte, criar o projeto e executar os arquivos bat para implantar o aplicativo.

Agora, queremos automatizar a implantação sem que o usuário baixe o código-fonte e o usuário final só precise visitar um URL e preencher os parâmetros userid e password e selecionar a tag svn e ela deverá ser implantada. Como o Jenkins está sendo executado sob login anônimo, o arquivo bat existente não funcionará, pois não possui permissões para executar o script.

Então, eu gostaria de saber se existem alternativas para esse tipo de situação. Será bom se o contexto do usuário for representado usando a ID do usuário e a senha inseridas, permitindo que o arquivo em lote existente seja executado sem alterações adicionais. Se não for possível, gostaríamos de explorar outras idéias também, mas não temos flexibilidade para escolher uma ferramenta automatizada como fantoche etc., devemos ficar com esses arquivos em lotes.

Ensolarado
fonte
Compartilhar sua pesquisa ajuda a todos. Conte-nos o que você tentou e por que ele não atendeu às suas necessidades. Isso demonstra que você reservou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. Veja também How to Ask
gnat
Atualize minha pergunta. Entre em contato se precisar fornecer mais informações.
Ensolarado

Respostas:

11

Compartilharei o que estamos usando e, para onde estamos planejando, talvez isso ajude a dar uma idéia melhor.

  • Atualmente, usamos o Jenkins e o Github juntos - depois que algo é mesclado no master, o Github diz ao Jenkins e ele inicia uma compilação.
  • Usamos um script Nant no Jenkins para criar o projeto, executar testes de unidade e, se tudo parecer bom, ele inicia outro projeto do Jenkins. O script Nant também distribui um diretório com código totalmente compilado / CSS / JS minimizado, etc.
  • O projeto secundário do Jenkins pega a saída da compilação e a envia de volta ao Github, em um repositório separado.
  • Um arquivo .BAT é executado a cada 5 minutos no servidor da Web de temporariedade e basicamente verifica se há atualizações nesse repositório. Se uma atualização for encontrada, fazemos o download da versão mais recente, fazemos backup de nossos arquivos temporários e implantamos a versão mais recente na pasta temporária.
  • Para entrar no ar, temos um arquivo .BAT que lida com o backup dos arquivos ao vivo e a cópia dos arquivos do repositório nos arquivos ao vivo. É executado manualmente. Ele não lida com atualizações SQL (fazemos manualmente).

Agora, obviamente, isso não é totalmente ideal, mas está funcionando para nós. Queremos expandir isso no futuro para:

  • Use o Web Deploy para enviar os arquivos do Jenkins diretamente para o IIS e execute outros comandos que precisamos executar.
  • Use migrações automáticas (um recurso do Entity Framework) para lidar com todas as atualizações SQL, como parte da entrada em operação.
Nicholas
fonte
É quase o mesmo que estamos seguindo. Mas, me perguntei se o Web Deploy poderia instalar serviços do Windows etc. e tudo o que era necessário para aplicativos Web complexos. Atualmente, estamos usando ferramentas ps e está funcionando bem. Para o DB, planejamos usar a ferramenta DeployDB.
Sunny
Como você lida com situações quando o IIS está bloqueando arquivos? Como você lida com situações em que alguém está trabalhando com seu aplicativo. Você tem vários nós ou apenas interrompe o aplicativo para usuários que trabalham no momento da publicação?
Piotr Perak
1
@ Peri - esqueci de mencionar na minha resposta original, mas estamos planejando ter dois servidores de produção e alternar entre eles quando necessário (usando IIS ou nginx). Isso nos permitirá "aquecer" o outro servidor ativo quando a implantação ocorrer e depois mudar para ele, para que não ocorra um tempo de inatividade perceptível.
Nicholas
4

Eu já estou usando o Jenkins para aplicativos .Net e TFS.

  1. Adicione a configuração necessária ao seu projeto e a transformação e faça o check-in do código.
  2. Obtenha as informações mais recentes do TFS (use o plug-in TFS)
  3. Crie o projeto (use o MSBuild Plug-in). você pode publicar o código do Msbuild usando argumentos de linha de comando.
  4. Sincronize o código do local de publicação até o destino usando o comando msdeploy.exe (localizado em "C: \ Arquivos de Programas (x86) \ IIS \ Microsoft V2 \ msdeploy.exe")
  5. Você também pode enviar e-mails e fazer o backup via Jenkins.

Você também pode usar o MSTest.exe para executar o teste de unidade e mostrá-lo no console jenkin ou publicar o resultado do teste também.

Sanjeev Kumar
fonte