Use o Servidor Master / Slave Jenkins vs mantendo 3 servidores separados? [fechadas]

3

Antecedentes:

Sou um desenvolvedor de SW que possui alguma experiência na configuração de soluções de integração contínua, mas não estou muito familiarizado com as vantagens e desvantagens de certas estratégias de integração contínua e gostaria de receber conselhos sobre os benefícios e desafios de duas estratégias de gerenciamento de servidor .

Pergunta:

Temos três aplicativos Android separados e complexos para os quais estou criando servidores de integração contínua. Eu criei com sucesso um protótipo de máquina virtual executando o Windows Server 2008, que compila com sucesso o código, lança um emulador e executa testes de unidade do Android. Separadamente, também consegui executar a análise estática que desejamos executar neste código para fornecer feedback aos desenvolvedores.

Em configurações anteriores usando CruiseControl.NET em vez de jenkins, tivemos sucesso na manutenção de 3 máquinas virtuais separadas, todas com hardware virtualizado independente. Os benefícios dessa configuração são compartimentalizações - um projeto pode alterar seu servidor de criação sem afetar o outro projeto.

No entanto, mudando para Jenkins, eu notei que ele suporta nós mestre / escravo , que poderia permitir-me configurar uma instância mestre do Jenkins com múltiplos projetos, e então configurar um número de nós escravos que, como eu entendo, executariam qualquer tarefa do Jenkins - a compilação, teste unitário, análise estática e passaria essa informação para o mestre servidor. Os benefícios desta configuração parecem ser:

  • Escalabilidade - posso adicionar facilmente um 4º ou 5º projeto e manter o mesmo número de escravos
  • Requer configuração de apenas 1 mestre e 3 escravos, o que é provavelmente mais fácil de configurar do que 3 mestres separados.

Desafios com esta situação parecem ser:

  • vou ter que aprender a criar escravos
  • Eu terei que lidar com a comunicação entre os clientes e escravos
  • Posso ter problemas ao executar testes de unidade que exigem interação com a interface do usuário. Poste descrevendo como executar escravos sem cabeça

Existem outros benefícios imediatos ou desafios que eu tenha esquecido, ou alguém que tenha experiência na criação de jenkins tem uma opinião sobre qual abordagem seria mais apropriada?

    
por CrimsonX 23.01.2014 / 00:34

1 resposta

5

Sua compreensão é bem completa. A única coisa que posso acrescentar é que o uso de terminologia "mestre / escravo" em jenkins / hudson é um pouco corrompido na minha opinião. Como os "escravos" são mais como executores no esquema distribuído de disparar jobs / builds / projects. Eu não acho que ter 3 mestres jenkins separados é razoável em sua situação.

1) - Eu terei que aprender como criar escravos - Isso não é realmente uma preocupação, é apenas um arquivo jar para o escravo. Pode ser instalado em outro sistema operacional com bastante facilidade (Linux, Windows, Unix) pode ser executado como um serviço / daemon. Então você só terá que anexar esse escravo ao mestre.

2) Eu terei que lidar com a comunicação entre os clientes e escravos - Isso também é bem trivial, já que tudo que você precisa é gerenciar as chaves ssh e conta de usuário para os escravos se conectarem para os clientes.

3) Posso ter problemas ao executar testes de unidade que exigem interação com a interface do usuário - Isso não deve ser um problema novamente. Deve haver muitas soluções até agora.

Mais uma vez, eu realmente incentivo você a utilizar o jennkins em seu fluxo de trabalho de desenvolvimento para CI e CD, realmente não há coisas que os jenkins não possam fazer. Começou a usá-lo há 3 anos e nunca mais olhou para trás.

A única pedra angular que vejo em sua situação particular é que é uma nova ferramenta e pode haver uma pequena curva de aprendizado e alguns ajustes a serem feitos durante a migração do fluxo de trabalho antigo, mas provavelmente ele beneficiará muito você e sua equipe a longo prazo.

Espero que isso ajude.

    
por 23.01.2014 / 03:52