Como combinar o Vagrant com o Jenkins para o perfeito ambiente de integração contínua?

86

Você tem um projeto que tem alguns requisitos de SW para executar (por exemplo: uma versão específica do Apache, uma versão do PHP, uma instância de um banco de dados MySQL e alguns outros softwares).

Você já descobriu o Vagrant , então seu ambiente virtual está todo configurado. Você pode criar caixas com seus arquivos de configuração e livros de receitas.

Você também entendeu as vantagens de um sistema de integração contínua como o Jenkins .

Agora você gostaria de combinar esses dois mundos (Vagrant e Jenkins) para obter o ambiente de integração contínua perfeito. Para ser mais específico, você gostaria de não instalar o SW exigido pelo seu projeto na máquina que executa o Jenkins, mas gostaria de usar o ambiente virtual fornecido pelo Vagrant para construir periodicamente seu projeto em cima dele. O software CI (Jenkins) irá construir a caixa Vagrant para você e construir e testar seu projeto em cima dela.

Como você configuraria seu ambiente para conseguir isso?

Roberto Aloi
fonte
4
Além disso, sua configuração do Jenkins é uma caixa Vagrant, portanto, você pode executar este ambiente de CI em várias plataformas, pois há muitas diferenças entre elas.
Stephan Eggermont
1
Você criou esse ambiente? A combinação Docker & Jenkins já é bem conhecida, porém não será suficiente para ambientes Windows, caso em que a única boa opção, IMO, é o Vagrant + Jenkins. Existem alguns aspectos a considerar, por exemplo, realmente precisamos de escravos e em que contextos ou poderíamos usar um único servidor para criar um ambiente de construção vagrant por projeto sob demanda (em muitas empresas apenas alguns projetos estão constantemente em construção, a maioria raramente é construída), ou devemos usar isso em cima do sistema de desduplicação para reduzir a pegada de disco.
Majkinetor

Respostas:

36

é uma boa solução para construir sistema, minha sugestão:

  1. Seu jenkins atual funciona como CI mestre (provavelmente iniciado pelo usuário jenkins)
  2. Crie outro usuário na mesma máquina ou em outra máquina para trabalhar como modo escravo jenkins
    • O escravo jenkins pode ser invocado a partir do mestre jenkins e pode usar um usuário diferente, como o vagrant, que tinha permissão e ambiente para o vagrant, portanto, não interfere no servidor mestre jenkins original
    • crie sua caixa vagrant básica, então ela pode ser reutilizada para acelerar a sua implantação
  3. A maior parte das informações de instalação (pacotes) podem ser gerenciadas pelo fantoche (ou chef) para serem carregadas em sua caixa VM.

Provavelmente você pode dar uma olhada no veewee , que pode criar uma caixa vagrant instantaneamente .

Aqui está Facilite a CI com Jenkins CI e Vagrant para minha orientação para esta sugestão.

Larry Cai
fonte
1
Infelizmente, o seu link está quebrado
gogo_gorilla
3
Caso alguém esteja interessado no link quebrado, aqui está uma cópia de Facilite a CI com Jenkins CI e Vagrant
Gilberto Treviño
12

Você pode tentar o plug-in do Vagrant para Jenkins que atualmente suporta o Jenkins CD 1.532.3

Você pode ver uma demonstração desse plug-in em execução em http://unethicalblogger.com/2012/03/13/vagrant-plugin-in-action.html

Christophe Furmaniak
fonte
7
este plugin não é compatível com Jenkins acima de 1.490, então essa é uma grande limitação :-(
kenyee
não suporta vagrant rodando em escravos também :(
Christophe Furmaniak
1
Sim, mas então você terá que cuidar de todo o ciclo de vida da VM sozinho (criar, destruir ou não no final do trabalho, ...). A ideia por trás do plug-in é que ele faça isso para você e, então, você possa se concentrar em seu objetivo principal: usar uma VM como um contêiner isolado.
Christophe Furmaniak
2
O plug-in mencionado tem problemas irritantes, que ainda não foram corrigidos ( issues.jenkins-ci.org/browse/JENKINS-26326 ), e o desenvolvimento foi interrompido há um ano. Não recomendo.
Ross Ivantsiv
1
Executar a instância vagrant sob demanda para fazer a construção parece a coisa certa a se fazer. Se este plugin ainda não funciona?
Atifm de
1

Pessoalmente, eu sugiro usar o Hashicorp Packer para construir suas caixas Vagrant para desenvolvedores e, em seguida, usá-lo para gerar uma imagem Docker ou AWS ou OpenStack que você pode executar em seu sistema CI. O Vagrant é uma ferramenta incrível, mas a sobrecarga das VMs pode ser um pouco alta para um sistema de CI para aumentá-las e diminuí-las constantemente, especialmente se você quiser um feedback realmente rápido.

Em um cliente anterior, basicamente inicializamos as máquinas Vagrant uma vez com o sistema e, em seguida, executamos as compilações Docker / virtualenv dentro dessas VMs e as destruímos periodicamente quando havia uma atualização importante ou um problema com o ambiente não se comportando corretamente.

https://www.packer.io/docs/builders/openstack.html

dragon788
fonte
Se eu puder perguntar, você executou jenkins como um usuário separado? Se sim, como você conseguiu fornecer acesso ao vagrant ?? Obrigado
Jaswanth Manigundan
Desde que o vagrant seja instalado normalmente, ele é colocado no caminho do sistema. As caixas em si são normalmente carregadas no diretório home do usuário atual, mas você pode substituir o vagrant home com uma variável de ambiente. Combinamos tudo isso e tornamos a caixa puxada com uma parte específica da versão do processo de construção, de forma que fosse armazenada em cache uma vez e então reutilizada.
dragon788