Esegui Jenkins master e slave con Docker

Voglio impostare Jenkins master sul server A e slave sul server B con l'uso di Docker.

Entrambi i server sono macchine virtuali dedicate a Jenkins.

Attualmente ho avviato il contenitore Docker sul server A per il master , basato sull'image ufficiale di Jenkins . Ma quale image docker dovrei usare per lo schiavo di Jenkins?

Ciò dipende in realtà dall'ambiente e dagli strumenti necessari nell'ambiente di costruzione. Ad esempio, se si crea un progetto C, è necessaria un'image contenente un compilatore C e possibilmente make se si utilizza Makefiles. Se si crea un progetto Java, è necessario un JDK con un compilatore Java e forse Ant / Maven / Gradle se li usi come parte della tua build.

È ansible utilizzare lo slave evarga / jenkins come un buon punto di partenza per il tuo slave di costruzione.

Questa image contiene già JDK. Se hai semplicemente bisogno di JDK e Maven sul tuo slave di generazione, puoi build l'image Docker con il seguente Dockerfile :

 FROM evarga/jenkins-slave run apt-get install maven 

L'utilizzo di immagini Docker per gli slave di costruzione è in realtà una buona idea. Alcune delle ragioni appaiono in Templating Jenkins Build Ambienti con Docker Containers :

Docker si è affermata come un modo popolare e conveniente per avviare gli ambienti isolati e riproducibili, che consente ai contenitori Docker di essere gli ambienti slave più manutenibili. Le attrezzature per contenitori Docker e altre configurazioni possono essere controllate in versione in una definizione di ambiente chiamata Dockerfile e Dockerfiles consente di creare rapidamente più contenitori identici utilizzando questa definizione o per creare creazioni personalizzate in base all'image di Dockerfile come base .

Suggerisco di prendere il tentativo di utilizzare i nodes dinamici del docker dinamico, anziché creare manualmente nodes e collegarli a ssh. Date un'occhiata a https://engineering.riotgames.com/news/putting-jenkins-docker-container , è molto potente e penso che sia una delle uscas killer per Docker.