Forma eficaz de garantir “sistema de ardósia limpa” para serviço de integração contínua

10

Queremos configurar um serviço de integração contínua (CI) para o nosso projeto. Esse serviço de CI deve controlar todos os aspectos da vida do projeto, incluindo a implantação.

Ou seja, queremos que um agente de IC em cada iteração use um sistema limpo (especificamente o Ubuntu Server), implemente nosso projeto lá e execute testes.

Nós provavelmente escreveríamos o serviço de CI, do zero, já que nosso ecossistema é bastante incomum. A questão é: como efetivamente fornecer um sistema de ardósia limpo para cada iteração de CI?

Implantação de projeto instala alguns pacotes Debian, configura vários sites nginx e também instala alguns pacotes em um gerenciador de pacotes específico de linguagem de implementação (LuaRocks), em todo o sistema. Nada mais intrusivo do que isso (eu acredito). Portanto, é mais importante poder configurar rapidamente um slate limpo (dentro de um minuto no hardware moderno, mais rápido - melhor) do que garantir isolamento e limpeza absolutos.

Eu vejo duas maneiras de fazer o que precisamos:

  • Instale algum tipo de prisão (como lxc, talvez).
  • Ou instale uma máquina virtual que possa fazer instantâneos e usá-los.

Mas neste momento não tenho informações suficientes para decidir.

O que você aconselharia? Quaisquer outras opções? Algum nome de ferramenta específico?

Nota: O serviço de CI seria executado dentro de um convidado do Citrix XenServer. As soluções pagas são aceitáveis se os preços forem razoáveis. (Geralmente eles não são razoáveis neste campo.) Soluções de CI remoto não são aceitáveis.

    
por Alexander Gladysh 21.02.2012 / 23:13

4 respostas

5

Dê uma olhada no Chef / Vagrant . Não tenho certeza se será rápido o suficiente, mas algo para investigar.

Caso você não esteja familiarizado com o Chef, ele é um servidor projetado para permitir o provisionamento baseado em código simples de servidores. Eu recomendo dar uma olhada em um dos webcasts. Django Chef Webcast

Vagrant, veewee, chef-solo & coisas de faca-solo Eu acho que este cobre a maior parte do que você quer fazer.

Postagem do Vagrant no Blog Uma postagem no blog mostrando uma configuração rápida de um servidor usando o Vagrant.

    
por 20.08.2012 / 08:10
13

Dê uma olhada em Jenkins . Tem plugins que permitem que você execute compilações em máquinas virtuais em VMWare ou VirtualBox ou em a nuvem Amazon / a Eucalyptus . Para máquinas virtuais executadas na nuvem, você pode especificar um script de inicialização no qual possa executar etapas como a instalação de pacotes.

    
por 22.02.2012 / 19:06
2

Eu usaria a infraestrutura de VMs e criaria um modelo base ou usaria a nuvem como sugerido @LarsKotthoff. É fácil gerenciá-los rapidamente e você pode ter certeza de onde começou.

No entanto, você precisará de algo fora dessa VM para orquestrar o que está acontecendo (configure a máquina e inicie o processo desejado na máquina). Eu olharia para Jenkins por sua capacidade de capturar a saída de scripts para inspeção posterior.

Embora o Jenkins tenha começado como um servidor de IC, várias organizações com as quais já trabalhei usam muito mais do que isso, é uma ferramenta para dar o pontapé inicial (manualmente ou programado) e capturar resultados, e validar o que aconteceu como esperado. E é muito flexível.

    
por 20.08.2012 / 07:48
2

We want to set up a continuous integration (CI) service for our project. That CI service should control all aspects of the project life, including deployment.

Jenkins foi mencionado por muitos. Você pode ir até o chão com scripts, mas o Jenkins fornecerá a mesma flexibilidade com menos sobrecarga ao juntá-lo.

That is, we want a CI agent at each iteration to take a clean system (specifically Ubuntu Server), deploy our project there and run tests.

Project deployment install a few Debian packages, configures several nginx sites, and also install some packages in a implementation language-specific package manager (LuaRocks), systemwide. Nothing more intrusive than that (I believe). So, it is more important to be able to set up a clean slate fast (within a minute on modern hardware, faster — better) than to ensure absolute isolation and cleanness.

É aqui que as imagens das máquinas virtuais são úteis. Você pode configurar sua imagem limpa e fazer com que todas as máquinas iniciem uma bifurcação disso. A imagem original nunca é modificada, mas seu teste não saberá a diferença. Você definitivamente deve ser capaz de obter uma imagem de inicialização em um minuto.

Paid solutions are OK if prices are reasonable. (Usually they are not reasonable in this field.) Remote CI solutions not OK.

Se você está procurando várias máquinas ao mesmo tempo, confira Nimbula (estou sendo desavergonhada; trabalho para elas). Para implementações menores, é grátis e permite reunir sua própria nuvem privada para testes ... ou qualquer outra coisa. Entre o Jenkins e um arquivo de orquestração, você pode criar servidores host, clientes de teste e tudo mais para executar automaticamente o gammut completo do código de teste sem qualquer interação.

    
por 20.08.2012 / 20:32