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 co
ou svn switch
incluindo 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?
fonte
Respostas:
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 up
atualizaçõ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:
fonte
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.
fonte
Verifique se você possui os controles de check-in apropriados no SVN. Por exemplo, considere isso -
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!"
fonte
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
Se você quiser convencê-los, peça para configurar outro servidor para teste interno ou controle de qualidade.
fonte