Como dimensionar corretamente o Jenkins?

27

No meu projeto, temos um servidor da AWS executando Jenkins Master + 1 Jenkins slave (2 executores) ... e precisamos de mais
Para aumentar nosso poder de construção, temos três opções:

  1. Escalonar : aumentar a instância da AWS e adicionar mais executores.
  2. Escalonar : aumente a instância da AWS e adicione outro processo escravo de jenkins.
  3. Dimensionar : crie outra instância da AWS com um escravo jenkins e conecte-o ao mestre

Queremos fazer 2. como estamos em uma grande organização e nosso Jenkins Master atual já tem acesso a todos os lugares que ele precisa. Opção 3. "Novo servidor" é complicado, pois precisa de mais aprovações burocráticas que levarão semanas.

Então, minhas perguntas são:

  • Há algum problema técnico na opção 2? . Talvez os executores de cada escravo de Jenkins não estejam cientes dos outros executores de escravos?
  • Em geral, qual é a melhor abordagem para dimensionar o Jenkins? Ampliando ou ampliando?
Oscar Foley
fonte
Você terá uma armadilha: alterar um tipo de instância pode ser problemático se você mudar para um tipo de hardware diferente, pois seu volume deverá ser copiado e restaurado na nova instância.
Tensibai
2
Por que não número 3? A maneira usual de enviar trabalhos para Jenkins é dominar. E com base em determinadas mestre critérios irá enviá-lo sem costura para se apropriar de escravos
Romeo Ninov
FWIW, você também precisa analisar sua estrutura de compilação para ver como ela usa os recursos da máquina de compilar - a expansão pode não ajudar - encontrei casos em que o tempo de compilação para duas compilações paralelas na mesma máquina era maior que os tempos combinados de compilação de as mesmas 2 compilações executadas sequencialmente, sem sobreposição. Nesse caso, o número 3 seria realmente a única opção prática disponível.
Dan Cornilescu
Concordo que # 3 é melhor, mas eu não tenho argumentos para isso ou argumentos contra # 1 e # 2 ...
Oscar Foley
Se você tiver a oportunidade em seu ambiente, eu procuraria uma solução efêmera. Visto que você já está na AWS, você pode facilmente subir e descer máquinas conforme necessário ao lidar com a carga de trabalho. wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
casey vega

Respostas:

11

Não há problemas técnicos fundamentais com a execução de vários escravos Jenkins na mesma máquina. De fato, Executar Múltiplos Escravos na Mesma Máquina lista várias boas razões para fazê-lo:

Enquanto o uso correto de executores evita amplamente a necessidade de várias instâncias escravas na mesma máquina, há alguns casos de uso exclusivos a serem considerados:

  • Você deseja mais configurabilidade entre os nós configurados. Digamos que você tenha um nó configurado para ser usado o máximo possível e o outro nó para ser usado apenas quando necessário.
  • Você pode ter várias instalações mestras Jenkins construindo coisas diferentes e, portanto, essa configuração permite que você tenha escravos para mais de um mestre na mesma caixa. É isso mesmo, com Jenkins você realmente pode servir a dois mestres.
  • Você pode aproveitar a facilidade de iniciar / parar / substituir máquinas virtuais, talvez em conjunto com os plugins Jenkins, como o Libvirt Slaves Plugin .
  • Você deseja maximizar seu investimento e utilização de hardware, minimizando ao mesmo tempo o custo operacional (por exemplo, despesas de serviços públicos para executar escravos inativos).

Em geral, a expansão é preferida, principalmente porque a capacidade de expansão é tipicamente limitada pelos tipos / tamanhos dos recursos físicos disponíveis.

Em particular para aumentar o poder de compilação, recomendo uma análise da sua compilação real para determinar como ela usa os recursos da máquina, quais / onde estão seus gargalos e quais limitações de escalabilidade aumentam para revelar se a escalabilidade ajuda.

Por exemplo, encontrei casos em que o tempo de compilação para 2 compilações paralelas na mesma máquina era maior que os tempos combinados de compilação das mesmas 2 compilações executadas sequencialmente (sem sobreposição) na mesma máquina. Nesse caso, eu nem consideraria ampliar, pois isso diminuiria a capacidade geral de construção.

Dan Cornilescu
fonte
3

Eu acho que você não deveria fazer nenhum;)

Bem, mais ou menos. Eu acho que você precisa de mais executores, talvez suas compilações consumam muitos recursos? Eu correria pelo menos 4, mas corremos de 6 a 8, dependendo dos trabalhos. Eu gosto de combinar o número de núcleos aos exetores. Então, você pode escalar seus nós, acho que executamos um M4 grande para nossos 4-8 executores.

Eu também acho que você deve expandir, mas deve fazê-lo com inteligência. O Jenkins possui um plug-in para expandir automaticamente a AWS, dependendo do que está na fila de criação. Basicamente, você diz quantos trabalhos e quanto tempo a espera até que ele se torne escravo e envia os trabalhos para o novo escravo. Você também pode definir a quantidade máxima de escravos, a quantidade mínima, etc.

Levi
fonte
2

Eu aumentaria a escala em vez de aumentar a escala, optando pela opção 3. Criamos uma configuração em que todos os agentes Jenkins são executados em um ECS (Jenkins personalizado baseado no Docker) com um grupo de escalonamento automático. Todos os nossos mestres Jenkins estão se comunicando com o ECS, compartilhando a carga de trabalho no ECS, e não é necessário recriar o mestre Jenkins em um exercício de expansão.

Jon Brohauge
fonte