J'ai récemment hérité d'un projet Java piloté par Jenkins dans lequel le développeur principal venait de progresser. Il avait déployé le fichier Jenkins WAR sur une instance Tomcat sur un serveur virtuel, ce qui était considéré comme le "serveur de génération".
Ce serveur de génération avait un esclave configuré pour générer et déployer sur myserver.example.com
, un autre serveur virtuel. Au cours de la fin de semaine, le personnel des systèmes a retiré le serveur physique sur lequel le myserver.example.com
virtual vivait, générant l'exception suivante pour tout travail Jenkins configuré pour être déployé sur cet esclave:
Lorsque je clique sur le lien " Voir le journal pour plus de détails ", je vois la sortie de la console suivante:
[03/18/13 08:13:31] [SSH] Opening SSH connection to myserver.example.com:22.
Java.io.IOException: There was a problem while connecting to myserver.example.com:22
at com.trilead.ssh2.Connection.connect(Connection.Java:755)
at com.trilead.ssh2.Connection.connect(Connection.Java:546)
at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.Java:650)
at hudson.plugins.sshslaves.SSHLauncher.launch(SSHLauncher.Java:283)
at hudson.slaves.SlaveComputer$1.call(SlaveComputer.Java:200)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:662)
Caused by: Java.net.NoRouteToHostException: No route to Host
at Java.net.PlainSocketImpl.socketConnect(Native Method)
at Java.net.PlainSocketImpl.doConnect(PlainSocketImpl.Java:351)
at Java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.Java:213)
at Java.net.PlainSocketImpl.connect(PlainSocketImpl.Java:200)
at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:366)
at Java.net.Socket.connect(Socket.Java:529)
at com.trilead.ssh2.transport.TransportManager.establishConnection(TransportManager.Java:342)
at com.trilead.ssh2.transport.TransportManager.initialize(TransportManager.Java:450)
at com.trilead.ssh2.Connection.connect(Connection.Java:699)
... 9 more
[03/18/13 08:13:34] [SSH] Connection closed.
Cela a du sens, puisque l’esclave (le myserver.example.com
virtual) est hors ligne. Cependant, n'ayant aucune expérience préalable avec Jenkins, je ne sais pas exactement quelles sont les étapes à suivre pour configurer le maître Jenkins afin de créer/déployer ces tâches sur un nouvel esclave et comment configurer le nouvel esclave. Par exemple, dois-je installer quoi que ce soit sur le nouvel esclave ou faire tout type d’installation/config? Merci d'avance!
Ajouter un esclave à Jenkins est assez simple. Fondamentalement, si vous utilisez un esclave Unix, vous devez avoir un accès SSH à la machine. Vous devez également installer le plug-in Jenkins SSH Slaves. Une fois que vous avez cela, allez dans l’option Gérer Jenkins de votre Master et choisissez Gérer les nœuds .
Les étapes sont alors:
Certaines hypothèses concernent les outils installés sur l'esclave. Si vous avez des outils spécialisés, vous devrez peut-être les installer séparément (ou regardez les plugins qui gèrent les outils en mouvement immédiatement avant leur exécution). Cependant, si vos nœuds sont construits à partir d'un modèle contenant probablement tous vos outils de construction (Java, ant, etc. dans votre cas, probablement), il ne vous reste plus qu'à faire pour que les choses se passent bien.
J'ai rencontré le même problème que vous, dans mon cas c'était parce que je n'avais pas installé de serveur SSH sur Ubuntu.