É aceitável implantar aplicativo da web para produção diretamente do SVN

11

Questão

Existe uma razão legítima para NÃO usar o SVN para implantações de produção ou isso é apenas um caso de preferência pessoal e não existe um caso real contra o SVN?

fundo

Meu local de trabalho tem uma cultura de marcação de versão no SVN e, em seguida, a implantação dessas versões diretamente nos vários servidores da Web, usando svn coou svn switchincluindo diretamente a produção.

Pessoalmente, tenho um problema com isso, pois acredito que, sem usar um script de compilação e implantação ou algum formulário ou implantação automatizada, você perde as configurações do ambiente de integração, pois não são documentadas. No entanto, mais do que isso, tenho a sensação de que pode haver um perigo oculto em fazer aquilo que foi esquecido, algo que ainda precisa elevar sua cabeça feia.

Eu levantei minhas preocupações com a equipe de operações, responsável por implantar o código em nossos vários ambientes (preparo, pré-produção, produção) etc. Seus argumentos eram basicamente de que funcionou muito bem até agora, sem motivo para mudar.

Editar:

O que quero dizer sobre construir e implantar:

Por exemplo, se um desenvolvedor exigir uma configuração web.config adicionada para um ambiente específico. O Web.config geralmente não é mantido no svn e, portanto, esses arquivos são atualizados manualmente, sem qualquer forma de script de construção automatizado. Portanto, se eles estiverem perdidos ou o OPS se esquecer de adicionar um campo ao web.config para uma versão, você terá problemas.

Um script de construção que diz que usa XMLPoke para gerar automaticamente um web.config apropriado para um ambiente específico é ideal, pois você possui um script versionável que documenta todas as alterações necessárias para cada um de seus ambientes.

Método atual de compilação e implantação

Para o projeto em questão, um desenvolvedor cria uma versão manualmente, outros projetos têm a etapa de criação automatizada com NANT ou MSBuild, o que é bom.

As migrações de banco de dados para a maioria dos projetos são via scripts de banco de dados ou scripts de migração (Migrator.NET) ou pacotes CMS.

O IC geralmente é feito pelo Team City por check-in, temos um processo de revisão de código em que todos os tickets são feitos em filiais e, em seguida, são revisados ​​por pares para validação e correção / qualidade antes da verificação no tronco (funciona bem).

No entanto, a implementação real do código é quase sempre via SVN, seja através de uma finalização de uma liberação marcada ou, mais geralmente, de um switch SVN. Isso é algo que me parece estranho: estamos usando nosso repositório como parte do processo de implantação.

A configuração geralmente não muda com muita frequência, as únicas coisas que estarão nos arquivos de configuração são informações específicas do ambiente. Tudo o resto está no banco de dados.

Não me interpretem mal, isso funciona, funciona bem. No entanto, eu quero tentar empurrar para uma construção e implantação automatizadas. Eu usei isso com o Rails e Capistrano e para projetos pessoais usando Cygwin, Nant e SSH.

Mais importante, eu precisaria de argumentos válidos muito específicos para fazer com que meus colegas mudassem para o uso de uma compilação e implantação automatizada.

Ou não existem argumentos reais válidos contra o uso do SVN especificamente para implantar na produção?

Justin Shield
fonte
Você pode elaborar "sem usar um script de compilação e implantação, ou de alguma forma ou implantação automatizada, você perde as configurações do ambiente de integração"?
Talonx
@talonx - Por exemplo, se um desenvolvedor exigir uma configuração web.config adicionada para um ambiente específico. O web.config geralmente não é mantido no svn e, portanto, esses arquivos são atualizados manualmente sem qualquer forma de script de construção automatizado. Portanto, se eles estiverem perdidos ou o OPS se esquecer de adicionar um campo ao web.config, você terá problemas. Um script de construção que diz que usa XMLPoke para gerar automaticamente um web.config apropriado para um ambiente específico é ideal, pois você possui um script versionável que documenta todas as alterações necessárias para cada um de seus ambientes.
Justin Escudo
Obrigado. Talvez você possa editar sua pergunta para esclarecer esse ponto.
Talonx
Eles só precisam fazer o check-out das fontes ou existem etapas manuais após o check-out (compilação, empacotamento, configuração, ...)?
David

Respostas:

7

Da minha experiência, existem vantagens e desvantagens:

Prós:

  • Às vezes, você faz correções urgentes no servidor de produção e pode fazer o check-in diretamente a partir daí. (Embora teoricamente, por razões de segurança, é sempre uma boa ideia usar o acesso somente leitura ao repositório do servidor de produção.)

  • Simplicidade: você entrega rapidamente, embora, como outros mencionados aqui, a mudança para um esquema de script de atualização possa ser tão fácil.

Contras:

  • Seu sistema pode ficar instável durante as svn upatualizações do seu e do DB. Para um site de alto tráfego, isso significa que alguns usuários acessam mensagens de erro, páginas quebradas ou páginas vazias na melhor das hipóteses. Bem, é o que vemos frequentemente em vários serviços sociais. Um bom serviço, no entanto, o faz "atomicamente" no sentido de colocar o sistema no modo de manutenção pela duração de uma atualização. ( Você quebrou o reddit! )

  • Conflitos: resolver conflitos repentinos no servidor de produção é uma péssima idéia: novamente, o serviço se torna instável enquanto você o conserta.

  • Arquivos não relacionados no servidor de produção que podem ou não pertencer a você, embora, é claro, você possa evitá-lo verificando a subárvore correta no repositório.

  • Segurança: alguém que obteve acesso ao seu servidor de produção, legitimamente ou não, também obtém acesso aos seus repositórios, possivelmente também a outros produtos, e possivelmente também com acesso de gravação! A abertura geral do servidor SVN interno para o mundo externo é uma má ideia. Seus repositórios de origem devem estar protegidos por um firewall da empresa, ponto final.

  • De qualquer maneira, haverá scripts de atualização, por exemplo, para atualizar a estrutura do banco de dados, gerenciar cronjobs, etc. Por que não ter um script que faça tudo isso? - ou seja, extrai a última versão pré-empacotada, alterna para o modo de manutenção, atualiza fontes, executa scripts específicos da versão etc.

Edit: para aqueles que ainda estão no esquema SVN, não se esqueça disso na sua configuração do apache:

<DirectoryMatch .svn>
    Order deny,allow
    Deny from all
</DirectoryMatch>
mojuba
fonte
1
+1: excelentes argumentos. Talvez eu possa vendê-lo pelo aspecto de segurança e pelo risco de ter um repositório comprometido. Certamente, é um bom motivo para promover uma discussão contra o uso do SVN para implantações de produção.
23611 Justin Shield
2

Eu configurei um servidor de IC no meu trabalho que cria automaticamente nosso instalador, assumindo que os testes de unidade sejam aprovados com êxito. Demorou cerca de um dia de trabalho e me salvou muito mais do que isso desde que eu o configurei.

Se houver algum processo manual na configuração do site de liberação / instalador / produção, você invariavelmente economizará a você e ao tempo da empresa. Isso é apropriado para você, pois, a partir da sua pergunta, parece que há etapas de configuração manual no seu processo de instalação.

Para uma referência, consulte o próprio Joel falando sobre como um processo de criação de um único clique salva você a curto e médio prazo.

Bringer128
fonte
0

Verifique se você possui os controles de check-in apropriados no SVN. Por exemplo, considere isso -

  • Os recursos são verificados para uma liberação
  • O código é implantado no teste, o controle de qualidade faz seu trabalho
  • Os erros foram corrigidos, outra rodada de testes (no entanto, funciona em sua equipe)
  • O mesmo vale para pré-produção
  • Implantar na produção

Se alguém acidentalmente fizer check-ins após o estágio de pré-produção, há o risco de quebrar alguma coisa. Se isso for controlado - como em nenhum check-in permitido durante o pré-prod, exceto para correções de bugs - não vejo riscos.

Atualização: você tem um problema esperando para acontecer se você não verificar seus arquivos de configuração. Eu realmente não posso oferecer nenhum conselho para isso além de "por favor, e rápido!"

talonx
fonte
Os arquivos de configuração são registrados como algo como web.config-default. O maior problema é que é fácil esquecer de atualizar o arquivo com versão no SVN se você adicionar recursos, pois eles não são diretamente necessários para uma implantação. Esses arquivos estão quase sempre desatualizados e é somente quando você descobre que precisa do arquivo e está se esforçando para descobrir o que há de diferente entre o arquivo com versão e o arquivo sem versão. Além disso, você não deseja atualizar uma versão por ambiente no SVN pelo mesmo motivo.
Justin Escudo
Que tal fazer operações sempre tirar o arquivo de configuração do svn antes de implantar?
Talonx
0

Parece ok, desde que não exista nada fora do repositório. De fato, acredito que não se deve investir tempo em ferramentas de implantação nos primeiros meses do projeto. Porque haverá muitas implantações, não há clientes suficientes para se preocupar com um processo formal de liberação.

Mas quando o projeto tiver cerca de um ano, vale a pena considerar investir na ferramenta de implantação. Razões simples são

  • Os negócios crescem e você planeja hospedá-lo em mais de um servidor
  • Pode haver erros em um ambiente específico e você não tem nenhum lugar para replicar o erro. Não há uma maneira fácil de configurá-lo sem um processo tar-untar-forget_about_home_for_a_week.
  • É provável que alguém quebre a compilação. Quem quebrou a construção

Se você quiser convencê-los, peça para configurar outro servidor para teste interno ou controle de qualidade.

arunmur
fonte