Ich habe vor kurzem ein Jenkins-gesteuertes Java-Projekt geerbt, bei dem der primäre Entwickler gerade aufgestiegen ist und das Programm beendet hat. Er hatte die Jenkins-WARs auf einer Tomcat-Instanz auf einem virtuellen Server bereitgestellt, und dies wurde als "Build-Server" betrachtet.
Dieser Build-Server hatte einen Slave, der für das Erstellen und Bereitstellen auf einem anderen virtuellen Server, myserver.example.com
, konfiguriert wurde. Über das Wochenende haben die Systemmitarbeiter den physischen Server, auf dem myserver.example.com
virtual gelebt hat, zurückgezogen, wobei die folgende Ausnahme für jeden Jenkins-Job erzeugt wurde, der für die Bereitstellung auf diesem Slave konfiguriert ist:
Wenn ich auf den Link "See Log for more Details" klicke, sehe ich folgende Konsolenausgabe:
[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.
Dies ist sinnvoll, da der Slave (der virtuelle myserver.example.com
) offline ist. Ich habe jedoch keine wirklichen Erfahrungen mit Jenkins. Ich bin mir nicht sicher, welche Schritte erforderlich sind, um den Jenkins-Master so zu konfigurieren, dass er diese Jobs auf einem neuen Slave erstellt bzw. implementiert, und wie der neue Slave eingerichtet wird. Muss ich zum Beispiel etwas auf dem neuen Slave installieren oder irgendeine Art von Setup/Konfiguration vornehmen? Danke im Voraus!
Das Hinzufügen eines Sklaven in Jenkins ist ziemlich einfach. Wenn Sie einen Unix-Slave verwenden, benötigen Sie grundsätzlich einen SSH-Zugriff auf die Maschine. Sie müssen außerdem das Jenkins SSH Slaves-Plugin installiert haben. Sobald Sie das haben, gehen Sie zur Option Manage Jenkins auf Ihrem Master und wählen Sie Knoten verwalten.
Die Schritte sind dann:
Es gibt einige Annahmen über die Tools, die auf dem Slave installiert sind. Wenn Sie über spezialisierte Tools verfügen, müssen Sie sie möglicherweise separat installieren (oder Plug-Ins betrachten, die das Verschieben von Tools unmittelbar vor der Ausführung ausführen). Wenn Ihre Knoten jedoch aus einer Vorlage aufgebaut sind, auf der sich all Ihre Build-Tools befinden (Java, Ant usw. in Ihrem Fall wahrscheinlich), müssen Sie dies nur tun, um die Dinge in Gang zu setzen.
Ich bin auf das gleiche Problem gestoßen wie Sie. In meinem Fall hatte ich keinen SSH-Server unter Ubuntu installiert.