Come ridimensionare correttamente Jenkins?


27

Nel mio progetto abbiamo un server AWS con Jenkins Master + 1 Jenkins slave (2 esecutori) ... e ne abbiamo bisogno di più
Per aumentare il nostro potere di costruzione abbiamo tre opzioni:

  1. Scale up : Fare esempio AWS più grande e aggiungere più esecutori.
  2. Scale Up : Fai esempio AWS più grande e aggiungere un altro Jenkins processo Slave.
  3. Ridimensionamento : crea un'altra istanza AWS con uno slave jenkins e collegalo al master

Vogliamo fare 2. poiché siamo in una grande organizzazione e il nostro attuale Maestro Jenkins ha già accesso a tutti i luoghi di cui ha bisogno. Opzione 3. "Nuovo server" è complicato in quanto richiede più approvazioni burocratiche che richiederanno settimane.

Quindi le mie domande sono:

  • Vi sono problemi tecnici nell'opzione 2? . Forse gli esecutori di ogni schiavo Jenkins non sono a conoscenza degli altri esecutori di schiavi?
  • In generale, qual è l'approccio migliore per ridimensionare Jenkins? Scalare o ridimensionare?

Avrai un insulto, la modifica di un tipo di istanza potrebbe essere problematica se passi a un diverso tipo di hardware, poiché il tuo volume dovrebbe essere sottoposto a backup e ripristinato nella nuova istanza.
Tensibai,

2
Perché non il numero 3? Il solito modo per inviare lavori a Jenkins è quello di padroneggiare. E sulla base di determinati criteri il maestro lo invierà senza problemi allo schiavo appropriato
Romeo Ninov,

FWIW, devi anche analizzare la tua struttura di build per vedere come utilizza le risorse della build machine - il ridimensionamento potrebbe non aiutare - ho riscontrato casi in cui il tempo di build per 2 build parallele sullo stesso computer era più lungo dei tempi di build combinati di gli stessi 2 build eseguiti in sequenza, senza sovrapposizioni. In tal caso, il n. 3 sarebbe davvero l'unica opzione pratica disponibile.
Dan Cornilescu,

Concordo sul fatto che il n. 3 sia migliore, ma non ho argomentazioni o argomentazioni contro il n. 1 e il n. 2 ...
Oscar Foley,

Se hai l'opportunità nel tuo ambiente, cercherei una soluzione effimera. Visto che sei già in AWS, puoi facilmente spostare le macchine su e giù come necessario durante la gestione del carico di lavoro. wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
casey vega

Risposte:


11

Non ci sono problemi tecnici fondamentali con l'esecuzione di più jenkins slave sulla stessa macchina. Infatti, l' esecuzione di più slave sulla stessa macchina elenca diversi buoni motivi per farlo:

Mentre l'uso corretto degli esecutori ovvia in gran parte alla necessità di più istanze slave sulla stessa macchina, ci sono alcuni casi d'uso unici da considerare:

  • Volete maggiore configurabilità tra i nodi configurati. Supponi di avere un nodo impostato per essere utilizzato il più possibile e l'altro nodo da utilizzare solo quando necessario.
  • Potresti avere più installazioni master Jenkins che costruiscono cose diverse, e quindi questa configurazione ti permetterebbe di avere slave per più di un master nella stessa scatola. Esatto, con Jenkins puoi davvero servire due padroni.
  • Potresti voler sfruttare la facilità di avvio / arresto / sostituzione di macchine virtuali, magari in combinazione con plugin Jenkins come il plugin Libvirt Slaves .
  • Desiderate massimizzare l'investimento e l'utilizzo dell'hardware, riducendo al contempo i costi operativi (ad es. Le spese di servizio per l'esecuzione di slave inattivi).

In generale si preferisce il ridimensionamento, principalmente perché la capacità di ridimensionamento è in genere limitata dai tipi / dimensioni delle risorse fisiche disponibili.

In particolare per aumentare la potenza della build, consiglierei un'analisi della build effettiva per determinare come utilizza le risorse della macchina, quali / dove sono i suoi colli di bottiglia e quali limiti di scalabilità solleva per rivelare se il ridimensionamento aiuta anche.

Ad esempio, ho riscontrato casi in cui il tempo di compilazione per 2 build parallele sulla stessa macchina era più lungo dei tempi di build combinati delle stesse 2 build eseguite in sequenza (non sovrapposte) sulla stessa macchina. In tal caso non avrei nemmeno in considerazione scaling up come sarebbe in realtà diminuire la capacità complessiva dell'edificio.



3

Penso che non dovresti fare nessuno dei due;)

Beh un pò. Penso che tu abbia bisogno di più esecutori, forse le tue build richiedono davvero molte risorse? Avrei eseguito almeno 4 ma eseguiremo da 6 a 8 a seconda dei lavori. Mi piace abbinare il numero di core agli esportatori. Quindi potresti voler ingrandire i tuoi nodi, penso che eseguiamo un M4 di grandi dimensioni per i nostri esecutori 4-8.

Penso anche che dovresti ridimensionarlo, ma dovresti farlo in modo intelligente. Jenkins ha un plugin per ridimensionare automaticamente su AWS a seconda di cosa si trova nella coda di compilazione. Fondamentalmente gli dici quanti lavori e per quanto tempo aspetta prima che si alzi uno schiavo e mandi i lavori al nuovo schiavo. È inoltre possibile impostare la quantità massima di slave, la quantità minima ecc.


2

Scalerei invece di scalare, andando per l'opzione 3. Abbiamo fatto una configurazione in cui abbiamo tutti gli agenti Jenkins in esecuzione su un ECS (Jenkins basato su Docker personalizzato) con un gruppo di ridimensionamento automatico. Abbiamo tutti i nostri master Jenkins che comunicano con l'ECS, condividendo così il carico di lavoro sull'ECS, e non c'è bisogno di ricreare il maestro Jenkins in un esercizio su vasta scala.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.