22
0
Fork 0
wiki/HowtoJenkins.md

161 lines
4.6 KiB
Markdown
Raw Normal View History

2017-05-09 22:53:41 +02:00
---
categories: dev
title: Howto Jenkins
...
2016-12-29 11:25:39 +01:00
2017-05-09 22:53:58 +02:00
* Documentation : <https://jenkins.io/doc/>
Jenkins est un outil open source d'intégration continue qui est écrit
en Java, Jenkins peut fonctionner dans un conteneur de servlets tel
quApache Tomcat, ou en mode autonome avec son propre serveur Web
embarqué.
2016-12-29 11:25:39 +01:00
# *Compatibilité des versions*
On recommande en :
* debian 8 avec du Java 7 et une version inférieure à 2.54 de Jenkins
* Debian 9 avec du Java 8 et une version supérieure à 2.54 de Jenkins
* Debian 10 avec du Java 11 et une version supérieure à 2.164.1 de Jenkins
Notons qu'il n'est pas compatible avec Java 9 et 10.
2016-12-29 11:25:39 +01:00
# *Installation*
Jenkins nest pas disponible dans les dépôts Debian, il faut donc ajouter le dépôt comme suit:
~~~
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
2016-12-29 11:25:39 +01:00
~~~
Ensuite on procède à linstallation:
~~~
2017-01-14 00:06:38 +01:00
# apt update
2016-12-29 11:25:39 +01:00
apt install jenkins
~~~
# *Configuration*
Par défaut Jenkins utilise le port 8080, pour modifier cela, il faut modifier le fichier /etc/default/jenkins et modifier la ligne suivante:
2016-12-29 11:25:39 +01:00
~~~
HTTP_PORT=8080
~~~
Le */home* de jenkins se trouve dans:
~~~
/var/lib/jenkins/
~~~
2017-05-09 22:54:58 +02:00
Il faut créer par exemple la clé ssh de jenkins dans ce répertoire, en se connectant avec l'utilisateur jenkins en faisant:
2016-12-29 11:25:39 +01:00
~~~
su - jenkins
~~~
Puis générer la clé SSH.
## Modifier le repertoire temporaire de Jenkins
Souvent la partition /tmp est en noexec, ce qui pose des problèmes a Jenkins lors d'un clonage de dépôt où il y a besoin dexécuter un script sh
On peut modifier le dossier tmp dans */var/lib/jenkins/tmp* et bien donner comme propriétaire *jenkins:jenkins* au dossier *tmp*
Il faut ensuite mettre la configuration suivant dans */etc/default/jenkins* :
~~~
# use a different tmpdir for jenkins
JAVA_ARGS="$JAVA_ARGS -Djava.io.tmpdir=/var/lib/jenkins/tmp/"
~~~
Pour le que dossier *tmp* soit vider au redémarrage de la machine, comme un vrai dossier /tmp, il faut le monter en *tmpfs* dans */etc/fstab* :
~~~
tmpfs /var/lib/jenkins/tmp tmpfs defaults,nosuid,nodev,size=1024m 0 0
~~~
## Configuration Reverse proxy Apache en https
Voici une configuration d'un VirtualHost Apache pour proxyfié Jenkins en https :
~~~
<VirtualHost *:80>
2019-01-08 10:20:44 +01:00
ServerName jenkins.domaine.com
Redirect permanent / https://jenkins.domaine.com/
</VirtualHost>
<VirtualHost *:443>
2019-01-08 10:20:44 +01:00
ServerName jenkins.domaine.com
ServerAdmin webmaster@localhost
<Directory proxy:http://localhost:8080/*>
Order deny,allow
Allow from all
</Directory>
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Location />
ProxyPass http://localhost:8080/ nocanon retry=0
ProxyPassReverse http://localhost:8080/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</Location>
CustomLog /var/log/apache2/access_jenkins.log combined
ErrorLog /var/log/apache2/error_jenkins.log
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCertificateFile /etc/ssl/cert/foo.crt
SSLCertificateKeyFile /etc/ssl/private/bar.key
SSLCertificateChainFile /etc/ssl/cert/DigiCertCA.crt
</VirtualHost>
~~~
## Générer un "Crumb" pour la protection CSRF (Cross Site Request Forgery) de Jenkins
Depuis Jenkins 2.X la protection CSRF est activé par défaut. Si on administre Jenkins en passant par un reverse proxy Apache ou Nginx, on doit générer un Crumb avec l'utilisateur admin de Jenkins comme ceci :
Avec une requête curl :
~~~
# curl -u "admin_user:password" 'http://localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
~~~
Avec une requête wget :
~~~
# wget --user=admin_user --password=password --auth-no-challenge -q --output-document - 'http://localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
~~~
2019-01-08 10:20:44 +01:00
Si on passe par un reverse proxy, il ne faut pas oublier de cocher l'option sur l'interface web dans Administrer Jenkins -> Configurer la sécurité globale -> CSRF Protection -> Activer la compatibilité proxy
## Problème de configuration de Reverse Proxy
2019-01-08 10:20:44 +01:00
Si sur la page d'administration de Jenkins l'erreur suivante apparaîtra :
~~~
La configuration de votre proxy inverse n'est pas bonne
~~~
2019-01-08 10:20:44 +01:00
Il faut configurer le ProxyPass avec l'option _nocanon_ comme ceci :
~~~
<Location />
ProxyPass http://localhost:8080/ nocanon
ProxyPassReverse http://localhost:8080/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</Location>
~~~