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.