Dockerizing Jenkins costruisce – gli schiavi come contenitori o costruisce come contenitori?

Sto cercando di capire la migliore strategia per la costruzione di containerizzazioni in un'infrastruttura CI / CD di Jenkins usando Docker. Da quello che vedo ho due opzioni:

(1) Utilizzare gli schermi effimeri che vengono forniti su richiesta su host Docker utilizzando il plugin Docker: https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin Una volta che la build completa lo slave è disposto. Di conseguenza, una sola costruzione può essere eseguita su un singolo slave.

(2) Utilizzare gli slave statici (ad esempio VM) che vengono eseguiti all'interno dei contenitori Docker utilizzando il plugin di Custom Build Environment di CloudBees Docker: https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Custom+Build+Environment + Plugin Di conseguenza, più build (isolate) possono essere eseguite su un singolo slave.

Quali sono i principali vantaggi / svantaggi di un approccio rispetto all'altro? Quando e perché dovrei scegliere uno sopra l'altro? Questo non mi sembra affatto ovvio.

Sospetto che i build siano più leggeri che gli slave, quindi per un'infrastruttura CI / CD che orchestri una grande pipeline end-to-end con molti lavori in esecuzione (2) sarebbe più scalabile – each slave Jenkins incide alless 2 thread sul nodo master.

Modifica

La mia preferenza è l'opzione 1 (slave effimeri) con il plugin Docker .

Con questo plugin, dichiarate le tue immagini di build nelle impostazioni globali di Jenkins, puoi influenzare le etichette alle immagini Docker:

immettere qui la descrizione dell'immagine

Nel tuo lavoro devi solo utilizzare le etichette pertinenti e il plugin Docker creerà lo slave in un nuovo contenitore.

Con il plugin Docker, Jenkins spin-up un nuovo slave in pochi secondi. Quindi, anche se stai usando una conduttura con molte fasi, funziona bene.

Questo è quello che intendo implementare a Forgerock (la mia azienda):

  • 2 potenti macchine metalliche nude (con SSD, 32 core e 1 TB di RAM)
  • Il plugin Jenkins Docker
  • Gli artefatti di Maven caching usando Artifactory (per non scaricare Internet)
  • Il contenitore docker utilizzerà una cache Maven locale (quindi sono sicuro di non utilizzare un vecchio / odontese artefatto Maven)

Ho fatto un POC su una piccola macchina metallica nuda e funziona bene 🙂

Se stai utilizzando schermi effimeri senza Maching caching, può diventare un problema per quanto riguarda le performance.

Per quanto riguarda i plugin Jenkins, c'è un nuovo sviluppato da Nicolas De Loof: Docker Slaves plugin .

Devo provare questo nuovo plugin.