3.8. Exécuter Jenkins comme une application autonome

Vous pouvez exécuter le serveur Jenkins d'une des deux manières suivantes : soit comme une application autonome, soit deployé comme une application web standard sur un conteneur de servlets Java ou un serveur d'application comme Tomcat, JBoss, ou GlassFish. Les deux approches ont leurs avantages et leurs inconvénients, nous allons donc examiner les deux ici.

Jenkins est fourni sous la forme d'un fichier WAR que vous pouvez exécuter directement en utilisant un conteneur de servlet intégré. Jenkins utilise le moteur de servlet léger Winstone pour vous permettre d'exécuter le serveur directement, sans avoir à configurer un serveur web par vous-même. C'est probablement la meilleure façon de commencer, vous permettant d'être opérationnel avec Jenkins en quelques minutes. C'est aussi une option très flexible, offrant quelques fonctionnalités supplémentaires non-accessibles si vous déployez Jenkins sur un serveur d'application classique. En particulier, si vous exécutez Jenkins en tant que serveur autonome, vous serez en mesure d'installer et mettre à jour les plugins à la volée, et de redémarrer Jenkins directement depuis les écrans d'administration.

Pour exécuter Jenkins en utilisant le conteneur de servlet intégré, allez à la ligne de commande et entrez la commande suivante :

C:\Program
			Files\Jenkins>
			java -jar jenkins.war
			[Winstone 2011/07/01 20:54:53] - Beginning extraction from war file
			[Winstone 2011/07/01 20:55:07] - No webapp classes folder found -
			C:\Users\john\
			.jenkins\war\WEB-INF\classes
			jenkins home directory: C:\Users\john\.jenkins
			...
			INFO: Took 35 ms to load
			...
			[Winstone 2011/07/01 20:55:08] - HTTP Listener started: port=8080
			[Winstone 2011/07/01 20:55:08] - Winstone Servlet Engine v0.9.10 running:
			controlPort=disabled
			[Winstone 2011/07/01 20:55:08] - AJP13 Listener started: port=8009
		

Dans un environnement Linux, la procéure est similaire. Notez comment mous démarrons le serveur Jenkins à partir du compte utilisateur “jenkins” que nous avons créé plus tôt :

john@lambton:~$ sudo su - jenkins
			jenkins@lambton:~$ java -jar /usr/local/jeknins/jenkins.war
			[Winstone 2011/07/16 02:11:24] - Beginning extraction from war file
			[Winstone 2011/07/16 02:11:27] - No webapp classes folder found -
			/home/jenkins/
			.jenkins/war/WEB-INF/classes
			jenkins home directory: /home/jenkins/.jenkins
			...
			[Winstone 2011/07/16 02:11:31] - HTTP Listener started: port=8080
			[Winstone 2011/07/16 02:11:31] - AJP13 Listener started: port=8009
			[Winstone 2011/07/16 02:11:31] - Winstone Servlet Engine v0.9.10 running:
			controlPort=disabled

Cela démarrera le moteur de servlet intégré dans la fenêtre de la console. L'application Web Jenkins sera maintenant disponible sur le port 8080. Lorsque vous exécutez Jenkins en utilisant le serveur intégré, il n'y a pas de contexte d'application Web, donc vous accèdez à Jenkins directement en utilisant l'URL du serveur (e.g., http://localhost:8080 ).

Pour arrêter Jenkins, pressez simplement Ctrl-C.

Par défaut, Jenkins s'exécutera sur le port 8080. Si cela ne convient pas à votre environnement, vous pouvez spécifier le port manuellement, en utilisant l'option --httpPort :

			$
			java -jar jenkins.war --httpPort=8081
		

Dans une architecture réelle, Jenkins peut ne pas être la seule application Web à s'exécuter sur votre serveur de build. Selon la capacité de votre serveur, Jenkins peut avoir à cohabiter avec d'autres applications Web ou des gestionnaires de dépôts Maven, par exemple. Si vous exécutez Jenkins aux côtés d'un autre serveur d'application, tels que Tomcat, Jetty ou GlassFish, vous aurez aussi besoin de remplacer le port ajp13, en utilisant l'option --ajp13Port :

			$
			java -jar jenkins.war --httpPort=8081
				--ajp13Port=8010
		

Quelques autres options utiles sont :

--prefix

Cet option vous permet de définir un chemin de contexte pour votre serveur Jenkins. Par défaut Jenkins s'exécutera sur le port 8080 sans chemin de contexte ( http://localhost:8080 ). Toutefois, si vous utilisez cette option, vous pouvez forcer Jenkins à utiliser n'importe quel chemin de contexte qui vous plaît, par exemple:

						$
						java -jar jenkins.war
							--prefix=jenkins
					

Dans ce cas, Jenkins sera accessible depuis http://localhost:8080/jenkins .

Cette option est souvent utilisée lors de l'intégration d'une instance autonome de Jenkins avec Apache.

--daemon

Si vous exécutez Jenkins sur une machine Unix, vous pouvez utiliser cette option pour démarrer Jenkins comme une tâche de fond, s'exécutant comme un démon unix.

--logfile

Par défaut, Jenkins écrit son fichier de journalisation dans le répertoire courant. Cependant, sur un serveur, vous avez souvent besoin d'écrire vos fichier de journalisation dans un répertoire prédéterminé. Vous pouvez utiliser cette option pour rediriger vos messages vers un autre fichier :

						$
						java -jar jenkins.war
							--logfile=/var/log/jenkins.log
					

Stopping Jenkins using Ctrl-C is a little brutal, of course—in practice, you would set up a script to start and stop your server automatically.

If you are running Jenkins using the embedded Winstone application server, you can also restart and shutdown Jenkins elegantly by calling the Winstone server directly. To do this, you need to specify the controlPort option when you start Jenkins, as shown here:

			$
			java -jar jenkins.war
				--controlPort=8001
		

A slightly more complete example in a Unix environment might look like this:

			$
			nohup java -jar jenkins.war
				--controlPort=8001 > /var/log/jenkins.log 2>&1 &
		

The key here is the controlPort option. This option gives you the means of stopping or restarting Jenkins directly via the Winstone tools. The only problem is that you need a matching version of the Winstone JAR file. Fortunately, one comes bundled with your Jenkins installation, so you don’t have to look far.

To restart the server, you can run the following command:

			$
			java -cp $JENKINS_HOME/war/winstone.jar
				winstone.tools.WinstoneControl reload: \
			--host=localhost --port=8001
		

And to shut it down completely, you can use the following:

			$
			java -cp $JENKINS_HOME/war/winstone.jar
				winstone.tools.WinstoneControl shutdown \
			--host=localhost --port=8001
		

Another way to shut down Jenkins cleanly is to invoke the special “/exit” URL, as shown here:

			$
			wget http://localhost:8080/exit
		

On a real server, you would typically have set up security, so that only a system administrator could access this URL. In this case, you will need to provide a username and a password:

			$
			wget --user=admin --password=secret
				http://localhost:8080/exit
		

Note that you can actually do this from a different server, not just the local machine:

			$
			wget --user=admin --password=secret
				http://buildserver.acme.com:8080/exit
		

Note that while both these methods will shut down Jenkins relatively cleanly (more so than killing the process directly, for example), they will interrupt any builds in progress. So it is recommended practice to prepare the shutdown cleanly by using the Prepare for Shutdown button on the Manage Jenkins screen (see Section 4.2, “Le tableau de bord de configuration — L'écran Administrer Jenkins” ).

Running Jenkins as a stand-alone application may not be to everyone’s taste. For a production server, you might want to take advantage of the more sophisticated monitoring and administration features of a full blown Java application server such as JBoss, GlassFish, or WebSphere Application Server. And system administrators may be wary of the relatively little-known Winstone server, or may simply prefer Jenkins to fit into a known pattern of Java web application development. If this is the case, you may prefer to, or be obliged to, deploy Jenkins as a standard Java web application. We look at this option in the following section.