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.
fonte
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.
fonte
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.
fonte
Jenkins foi mencionado por muitos. Você pode se familiarizar com os scripts, mas o Jenkins fornecerá a mesma flexibilidade, com menos sobrecarga.
É 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.
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.
fonte