Maneira 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 IC 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 adote um sistema limpo (especificamente o Ubuntu Server), implante nosso projeto lá e execute testes.

Provavelmente, nós mesmos escreveríamos o serviço de IC, do zero, pois nosso ecossistema é bastante incomum. A questão é: como fornecer efetivamente um sistema de ardósia limpo para cada iteração de IC?

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

Vejo duas maneiras de fazer o que precisamos:

  • Configure uma prisão de algum tipo (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ê recomendaria? Alguma outra opção? Algum nome de ferramenta específico?

Nota: O serviço de IC 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 ​​nesse campo.) As soluções de IC remoto não estão OK.

Alexander Gladysh
fonte

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, é um servidor projetado para permitir o provisionamento simples de servidores com base em código. Eu recomendo dar uma olhada em um dos webcasts. Django Chef Webcast

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

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

Philip Tinney
fonte
Obrigado. Você gostaria de fornecer mais detalhes em sua resposta?
precisa saber é o seguinte
Eu não o usei para isso, então tudo o que posso fazer é postar alguns links que acho que devem ajudar.
Philip Tinney
13

Dê uma olhada no Jenkins . Possui plug-ins que permitem executar compilações em máquinas virtuais no VMWare ou VirtualBox ou na nuvem Amazon / a Eucalyptus . Para máquinas virtuais executadas na nuvem, é possível especificar um script init no qual você pode executar etapas como a instalação de pacotes.

Lars Kotthoff
fonte
Obrigado, mas Jenkins é um servidor de CI e eu gostaria de saber sobre os meios para criar um nós mesmos.
Alexander Gladysh
2
@AlexanderGladysh Por que você quer reinventar a roda? As construções do Jenkins podem executar tudo, desde criar arquivos até scripts simples de shell, além de ter uma interface robusta, ótimo suporte e muitos plugins. Mesmo que a sua construção é muito complicado, tem que ser um lugar script shell que Jenkins pode executar
TheLQ
Mesmo se você não quiser usar o Jenkins, acho que algo baseado em nuvem seria o caminho a seguir. Você pode personalizar uma imagem da máquina para fornecer o software desejado e adicionar apenas configuração e código para testar ao iniciar a instância para reduzir o tempo de inicialização.
Lars Kotthoff
De qualquer forma, Jenkins ou não Jenkins, o que usar para obter instantâneos do sistema operacional mais rapidamente? (Por favor, pare de mencionar nuvens de terceiros
elas
Executar uma nuvem Eucalyptus / OpenStack / ... em seus próprios servidores?
Lars Kotthoff
2

Eu usaria a infraestrutura da VM e criaria um modelo base, ou usaria a nuvem como o @LarsKotthoff sugeriu. É fácil transformá-los rapidamente, e você pode ter certeza de onde começou.

No entanto, você precisará de algo externo à VM para orquestrar o que está acontecendo (configure a máquina e inicie o processo que desejar na máquina). Eu olhava 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 trabalhei agora o utilizam para muito mais do que isso, é realmente uma ferramenta para iniciar as coisas (manualmente ou agendada), capturar resultados e validar o que aconteceu como esperado. E é muito flexível.

tenacioustechie
fonte
Obrigado, mas eu gostaria de configurar as coisas dentro da instância da VM do Xen, não fora - isso é muito mais fácil de organizar no meu caso específico. Vou analisar Jenkins, mas ainda estou procurando uma solução mais estreita.
Alexander Gladysh
Além disso, elabore sobre "usar a infraestrutura da VM e criar um modelo base".
Alexander Gladysh
2

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

Jenkins foi mencionado por muitos. Você pode se familiarizar com os scripts, mas o Jenkins fornecerá a mesma flexibilidade, com menos sobrecarga.

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

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

É aqui que as imagens de máquinas virtuais são úteis. Você pode configurar sua imagem limpa e fazer com que cada máquina lance um garfo disso. A imagem original nunca é modificada, mas seu teste não saberá a diferença. Definitivamente, você deve conseguir obter uma imagem de bootstrap em um minuto.

As soluções pagas são aceitáveis ​​se os preços forem razoáveis. (Geralmente, eles não são razoáveis ​​nesse campo.) As soluções de IC remoto não estão OK.

Se você está procurando várias máquinas em execução ao mesmo tempo, confira o Nimbula (estou sendo sem-vergonha; trabalho para elas). Para implantações menores, é gratuito e permite reunir sua própria nuvem privada para teste ... ou qualquer outra coisa. Entre o Jenkins e um arquivo de orquestração, você pode ativar servidores host, clientes de teste e tudo o mais para executar automaticamente toda a gama de códigos de teste sem nenhuma interação.

Jeff Ferland
fonte
Ugh. Talvez eu esteja devagar hoje, mas tentei vasculhar o site Nimbula, mas não consigo ver a razão por trás do marketing. Você gostaria de apontar para um texto sensato que descreve como fazer o que eu preciso? (Ie configurar um modelo de máquina de hóspedes e, a partir do script, instanciar e matá-lo para cada sessão CI.)
Alexander Gladysh
@AlexanderGladysh É útil se você estiver usando muitas máquinas para construir a partir de / muito trabalho de IC. É inútil se você não tiver carga de trabalho suficiente para garantir um cluster de pelo menos três máquinas.
Jeff Ferland