Pergunta

O que constitui um processo de construção bom CI?

Nós usamos CI, mas é a implantação de produção ainda uma meta CI realista quando você tem dependências em vários serviços que devem ser implantados muito e outros aplicativos podem depender destes também.

É um bom bom CI processo de construção bom o suficiente quando o seu automatizado para QA e manual de lá?

Foi útil?

Solução

Bem "depende":)

Nós usamos nosso sistema de CI para:

  1. construir e unidade de teste
  2. deploy para caixa única, testes de corrida Intergration e código de análise
  3. deploy para ambiente de laboratório
  4. executar testes de aceitação no prod-like sistema
  5. queda compilações passe para queda de código para implantação prod

Este é um projeto greenfield de cerca de uma dúzia de serviços e bancos de dados implantado em mais de 20 servidores, que também teve dependências em meia dúzia de outros serviços 'externos'.

Usando uma ferramenta CI para implantar o seu produto para um ambiente de produção como uma meta realista? outra vez ... "depende"

Por que você iria querer fazer isso?

  • Se você tem o processo você pode rolar mudanças (e back roll) mais rápido e mais frequentemente
  • menos possibilidade de erro humano
  • você pode testar a mesma estratégia de implantação em um ambiente de teste antes de ir para problemas de produção e de captura anteriormente

Algumas coisas técnicas que você tem para o endereço antes de poder responder a esta:

  • o que é os requisitos de tempo de atividade para o seu sistema - Você está autorizado a ter tempo de inatividade ou não é preciso ser-se 24/7
  • ?
  • você tem processos de controle de mudanças no lugar que exigem intervenção humana / aprovação?
  • é o suficiente robusta implantação para qualquer componente de reverter para um estado conhecido-bom se uma implantação falhar?
  • é o seu sistema projetado para lidar com diferentes versões de serviços ou clientes em caso de uma ou várias implementações de componentes falhar (e você tem a reversão acima para última boa conhecida)?
  • se o processo tem a inteligência para lidar com uma implantação parcial em que um componente não pode lidar com versões mistas de suas dependências / clientes?
  • como você está entregando implantação de banco de dados / upgrades?
  • Você tem monitoramento no local para que você saiba quando algo dá errado?

Aqui estão alguns links relacionados recentes sobre automação e construir as ferramentas que você precisa .

Quando se trata baixo para ele o mais complexo o seu sistema o mais difícil é fazer tudo automatizar, mas isso não significa que ele não é um objetivo digno, ele só leva muito mais esforço e força de vontade para fazê-lo - tudo, desde sabendo das dificuldades que você está indo para enfrentar, os problemas que você tem que conta para (falha irá acontecer), os desafios políticos da construção de infra-estrutura (comparada mais produtos características).

Agora heres o grande segredo ... os desafios técnicos estão desafiando mas não impossível ... o política desafios podem ser insuperáveis. Tudo sobre isso custa dinheiro se o seu tempo dev ou comprar soluções 3rd party. Então, realmente, você pode construir o $ 1K, US $ 10 mil, US $ 100 mil, ou solução de US $ 1 milhão?

solução que quer que você vá para Verifique se a automação é robusto primeiro, segundo completo ... ou seja, certifique-se de ter como solução um robusto que puder para conseguir a implantação em um ambiente de teste em vez de uma solução frágil que implanta a produção.

Outras dicas

IC não é concebido como um mecanismo de implantação. É é bom ter seu CI executar qualquer implantação automatizada para um servidor de QA / teste, para garantir os aspectos do seu trabalho de construção, mas eu não usaria um sistema de CI como Cruise Control ou bambu como o meio de implantação.

CI é para construir a base de código periodicamente para a execução automatizar de testes automatizados, a verificação da base de código via análise estática e outras verificações dessa natureza.

Certifique-se de entender a idéia por trás de uma compilação CI. CI significa integração contínua e CI constrói são realmente pretende ser descartável compilações são executadas quando um código de desenvolvedor verificações no sistema de controle de origem (ou em algum intervalo especificado) para garantir que as mais novas mudanças não quebrar a base de código (daí a ideia de integrar continuamente as alterações para a base de código).

Para o efeito, a tecnologia utilizada para o processo de servidor de compilação real é em grande parte irrelevante em comparação com o que realmente acontece durante a construção. Como @pdavis mencionado, a compilação CI deve compilar a base de código, executar uma análise de código (FxCop, StyleCop, Lint, etc.), executar testes de unidade e de cobertura de código e executar qualquer outra análise personalizada a ser executada que deve impactar o conceito de um "sucesso" ou construir "falhou".

Ter uma compilação CI automaticamente deploy para um ambiente realmente não cai sob o controle de um servidor de compilação. Dito isto, você sempre pode criar um projeto separado que é executado no servidor de compilação que manipula a implantação quando detecta certas condições (como uma construção é concluída com sucesso), mas isso deve ser feito sempre como uma coisa completamente independente.

Eu estou começando em um novo projeto no trabalho que eu estou realmente ansioso para. Estamos ainda em fase de concepção inicial e só recentemente completou a Lógico arquitetura do sistema. Temos pedidos de novos servidores para o teste e estadiamento ambientes e estão a criação de um sistema de compilação Integração Contínua (CI) com base Cruise Control ( http://cruisecontrol.sourceforge.net/ ) e MSBuild ( http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx ), que é basicamente uma porta melhorada do ANT. Parece que Visual Studio 2005 arquivos de projeto e solução são todos agora em formato MSBuild. Cruise Control estará puxando automaticamente a fonte do Visual Source Safe (ok, não é Subversion, mas podemos lidar), compilá-lo e, em seguida, executá-lo através FXCop ( http://www.gotdotnet.com/Team/FxCop/ ), nUnit ( http://www.nunit.org/ ), NCover ( http : //ncover.org/site/ ), e por último mas não alugar Simian ( http://www.redhillconsulting.com.au/products/simian/ ). Cruise Control tem uma interface muito bom site para exibir todos os resultados compilados a partir de várias ferramentas e pode até mesmo exibir alterações de código de uma construção para o próximo. Ele também mantém o controle de todas as compilações em uma história de construção. Estou ansioso para o desenvolvimento orientado a testes e acho que este tipo de abordagem combinada com nUnit / NCover deve nos dar uma boa idéia muito antes de rolar para fora mudanças que nós não ter quebrado nada. Há também planos para incorporar algum tipo de usuário automatizado interface de teste, uma vez que está longe o suficiente ao longo do projeto. Dependendo da ferramenta, esta deve ser apenas uma questão de instalar a ferramenta no servidor de compilação e chamando-o de Cruise Control. Doce.

Um bom processo de CI terá cobertura de teste de unidade completa ou quase completa. Unidade testa classes de teste e métodos, os testes de integração comparada, que de teste várias partes do sistema. Quando você configurar seu CI constrói, tê-los automatizar os testes de unidade. Dessa forma, a CI constrói pode executar várias vezes por dia. Criámos a nossa para executar a cada 2 horas.

Você pode ter mais tempo de funcionamento baseia-se que seja executado uma vez por dia. Estes podem usar outros serviços e testes de integração são executados.

Eu estava assistindo a uma apresentação ThoughtWorks (criadores de Cruise Control) e eles realmente abordou esta questão. Sua resposta é que NÃO implantação é complexa demais para teste. Por quê? Porque de outra forma, seus clientes se tornam seus testadores, que é exatamente onde você não quer ser.

Se você tem uma estrutura de implantação complexa, configurar um servidor de visualização. Tê-lo fingir ser todos os sistemas que você precisa para conversar. Eles sempre pode começar em um estado conhecido bom, porque você pode redefinir a uma imagem limpa.

Para responder à sua pergunta inicial, um processo bom é aquele que permite a comunicação entre o repositório e os desenvolvedores. Se o repositório está em mau estado (código não compilar, testes falharam, etc.), os desenvolvedores saibam sobre isso o mais rápido possível, para que possam corrigi-lo.

O mais tarde um erro é descoberto, o mais caro é a correção. Então erros devem ser descoberto tão cedo quanto possível. Esta é a motivação por trás CI.

Um bom CI deve garantir a captura como muitos erros possível. As aplicações inteiras dispõe de código (muitas vezes em vários idiomas), o esquema de banco de dados, arquivos de implantação etc. Erros em qualquer um destes pode causar erros -. Por isso a CI deve tentar exercício como muitos deles quanto possível

CI não substitui uma disciplina QA adequada. Além disso, a CI não precisa ser muito abrangente sobre o primeiro dia do projeto. Pode-se começar com um processo CI simples que faz a compilação e testes de unidade básica inicialmente. Como você descobrir mais classes de bugs no QA, você deve adaptar o processo CI para tentar pegar futuras ocorrências desses erros. Também pode envolver verificações de código de análise estática, de modo que você pode implementar os ideais de codificação e design consistente em toda a base de código.

É um bom bom CI processo de construção bom o suficiente quando o seu automatizado para QA e manual de lá?

Eu acho, que a implantação "manual" é usado quando a pessoa com o papel implantação de engenheiro têm um medo de que alguma coisa após a implantação pode dar errado. Ele não têm confiança na confiabilidade ferramentas de implantação e estabilidade.

Este feito pode ir embora com testes processo de implantação automatizado em prod-environment.It como também tem a testar um mecanismo de reversão após a implantação.

Quando estas funções são testados o suficiente, você vai ganhar uma confiança neste processo e ferramenta que você usa.

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