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:
- Escalonar : aumentar a instância da AWS e adicionar mais executores.
- Escalonar : aumente a instância da AWS e adicione outro processo escravo de jenkins.
- 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?
jenkins
continuous-integration
capacity-planning
Oscar Foley
fonte
fonte
Respostas:
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:
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.
fonte
Use Kubernetes e Helm.
Eu recomendaria usar o gráfico Jenkins Helm. Ele é instalado
helm install stable/jenkins
e dimensionado automaticamente.https://github.com/kubernetes/charts/tree/master/stable/jenkins
fonte
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.
fonte
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.
fonte