mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

HowtoJenkins.md 4.6 KiB

3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. ---
  2. categories: dev
  3. title: Howto Jenkins
  4. ...
  5. * Documentation : <https://jenkins.io/doc/>
  6. Jenkins est un outil open source d'intégration continue qui est écrit
  7. en Java, Jenkins peut fonctionner dans un conteneur de servlets tel
  8. qu’Apache Tomcat, ou en mode autonome avec son propre serveur Web
  9. embarqué.
  10. # *Compatibilité des versions*
  11. On recommande en :
  12. * debian 8 avec du Java 7 et une version inférieure à 2.54 de Jenkins
  13. * Debian 9 avec du Java 8 et une version supérieure à 2.54 de Jenkins
  14. * Debian 10 avec du Java 11 et une version supérieure à 2.164.1 de Jenkins
  15. Notons qu'il n'est pas compatible avec Java 9 et 10.
  16. # *Installation*
  17. Jenkins n’est pas disponible dans les dépôts Debian, il faut donc ajouter le dépôt comme suit:
  18. ~~~
  19. wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
  20. sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
  21. ~~~
  22. Ensuite on procède à l’installation:
  23. ~~~
  24. # apt update
  25. apt install jenkins
  26. ~~~
  27. # *Configuration*
  28. Par défaut Jenkins utilise le port 8080, pour modifier cela, il faut modifier le fichier /etc/default/jenkins et modifier la ligne suivante:
  29. ~~~
  30. HTTP_PORT=8080
  31. ~~~
  32. Le */home* de jenkins se trouve dans:
  33. ~~~
  34. /var/lib/jenkins/
  35. ~~~
  36. Il faut créer par exemple la clé ssh de jenkins dans ce répertoire, en se connectant avec l'utilisateur jenkins en faisant:
  37. ~~~
  38. su - jenkins
  39. ~~~
  40. Puis générer la clé SSH.
  41. ## Modifier le repertoire temporaire de Jenkins
  42. 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 d’exécuter un script sh
  43. On peut modifier le dossier tmp dans */var/lib/jenkins/tmp* et bien donner comme propriétaire *jenkins:jenkins* au dossier *tmp*
  44. Il faut ensuite mettre la configuration suivant dans */etc/default/jenkins* :
  45. ~~~
  46. # use a different tmpdir for jenkins
  47. JAVA_ARGS="$JAVA_ARGS -Djava.io.tmpdir=/var/lib/jenkins/tmp/"
  48. ~~~
  49. 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* :
  50. ~~~
  51. tmpfs /var/lib/jenkins/tmp tmpfs defaults,nosuid,nodev,size=1024m 0 0
  52. ~~~
  53. ## Configuration Reverse proxy Apache en https
  54. Voici une configuration d'un VirtualHost Apache pour proxyfié Jenkins en https :
  55. ~~~
  56. <VirtualHost *:80>
  57. ServerName jenkins.domaine.com
  58. Redirect permanent / https://jenkins.domaine.com/
  59. </VirtualHost>
  60. <VirtualHost *:443>
  61. ServerName jenkins.domaine.com
  62. ServerAdmin webmaster@localhost
  63. <Directory proxy:http://localhost:8080/*>
  64. Order deny,allow
  65. Allow from all
  66. </Directory>
  67. ProxyRequests Off
  68. ProxyPreserveHost On
  69. AllowEncodedSlashes NoDecode
  70. <Location />
  71. ProxyPass http://localhost:8080/ nocanon retry=0
  72. ProxyPassReverse http://localhost:8080/
  73. RequestHeader set X-Forwarded-Proto "https"
  74. RequestHeader set X-Forwarded-Port "443"
  75. </Location>
  76. CustomLog /var/log/apache2/access_jenkins.log combined
  77. ErrorLog /var/log/apache2/error_jenkins.log
  78. SSLEngine on
  79. SSLProtocol all -SSLv2 -SSLv3
  80. SSLCertificateFile /etc/ssl/cert/foo.crt
  81. SSLCertificateKeyFile /etc/ssl/private/bar.key
  82. SSLCertificateChainFile /etc/ssl/cert/DigiCertCA.crt
  83. </VirtualHost>
  84. ~~~
  85. ## Générer un "Crumb" pour la protection CSRF (Cross Site Request Forgery) de Jenkins
  86. 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 :
  87. Avec une requête curl :
  88. ~~~
  89. # curl -u "admin_user:password" 'http://localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
  90. ~~~
  91. Avec une requête wget :
  92. ~~~
  93. # wget --user=admin_user --password=password --auth-no-challenge -q --output-document - 'http://localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
  94. ~~~
  95. 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
  96. ## Problème de configuration de Reverse Proxy
  97. Si sur la page d'administration de Jenkins l'erreur suivante apparaîtra :
  98. ~~~
  99. La configuration de votre proxy inverse n'est pas bonne
  100. ~~~
  101. Il faut configurer le ProxyPass avec l'option _nocanon_ comme ceci :
  102. ~~~
  103. <Location />
  104. ProxyPass http://localhost:8080/ nocanon
  105. ProxyPassReverse http://localhost:8080/
  106. RequestHeader set X-Forwarded-Proto "https"
  107. RequestHeader set X-Forwarded-Port "443"
  108. </Location>
  109. ~~~