web-dev-qa-db-fra.com

Comment utiliser Jenkins avec SSL / https

J'ai un serveur Fedora exécutant Jenkins que j'installe via yum. Tout va bien, je peux y accéder avec http://ci.mydomain.com.

Mais maintenant, je veux y accéder avec https://ci.mydomain.com afin que la connexion avec le nom d'utilisateur et le mot de passe soit cryptée.

Comment puis-je faire ceci?

Ce qui suit est mon /etc/sysconfig/jenkins fichier. Le démarrage de Jenkins fonctionne, mais je ne peux pas accéder à Jenkins avec le navigateur Web avec https://ci.mydomain.com ou http://ci.mydomain.com:443, ...

## Path:        Development/Jenkins
## Description: Configuration for the Jenkins continuous build server
## Type:        string
## Default:     "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Java executable to run Jenkins
# When left empty, we'll try to find the suitable Java.
#
JENKINS_Java_CMD=""

## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="jenkins"

## Type:        string
## Default:     "-Djava.awt.headless=true"
## ServiceRestart: jenkins
#
# Options to pass to Java when running Jenkins.
#
JENKINS_Java_OPTIONS="-Djava.awt.headless=true"

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
#
JENKINS_PORT="8080"

## Type:        integer(1:9)
## Default:     5
## ServiceRestart: jenkins
#
# Debug level for logs -- the higher the value, the more verbose.
# 5 is INFO.
#
JENKINS_DEBUG_LEVEL="5"

## Type:        yesno
## Default:     no
## ServiceRestart: jenkins
#
# Whether to enable access logging or not.
#
JENKINS_ENABLE_ACCESS_LOG="no"

## Type:        integer
## Default:     100
## ServiceRestart: jenkins
#
# Maximum number of HTTP worker threads.
#
JENKINS_HANDLER_MAX="100"

## Type:        integer
## Default:     20
## ServiceRestart: jenkins
#
# Maximum number of idle HTTP worker threads.
#
JENKINS_HANDLER_IDLE="20"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Pass arbitrary arguments to Jenkins.
# Full option list: Java -jar jenkins.war --help
#
JENKINS_ARGS="--httpsPort=443 --httpsKeyStore=/root/.keystore --httpsKeyStorePassword=MYPASSWORD"
39
Tim

Cette page devrait vous aider à la configurer derrière Apache (qui gérerait HTTPS): https://wiki.Eclipse.org/Hudson-ci/Running_Hudson_behind_Apache

En plus d'être un proxy inverse "normal", vous en aurez besoin (comme indiqué sur cette page):

Header edit Location ^http://www.example.com/hudson/ https://www.example.com/hudson/
17
Bruno

Au cas où vous utilisez Nginx et non Apache, vous pouvez utiliser proxy_redirect http:// https://; pour réécrire l'en-tête Location lorsque la réponse revient de Jenkins.

Une configuration complète de nginx où SSL est terminé avec Nginx et mandaté en interne à Jenkins en utilisant 8080 pourrait ressembler à ceci:

upstream jenkins {
  server 127.0.0.1:8080 fail_timeout=0;
}

server {
  listen 80 default;
  server_name 127.0.0.1 *.mydomain.com;
  rewrite ^ https://$server_name$request_uri? permanent;
}

server {
  listen 443 default ssl;
  server_name 127.0.0.1 *.mydomain.com;

  ssl_certificate           /etc/ssl/certs/my.crt;
  ssl_certificate_key       /etc/ssl/private/my.key;

  ssl_session_timeout  5m;
  ssl_protocols  SSLv3 TLSv1;
  ssl_ciphers HIGH:!ADH:!MD5;
  ssl_prefer_server_ciphers on;

  # auth_basic            "Restricted";
  # auth_basic_user_file  /home/jenkins/htpasswd;

  location / {
    proxy_set_header Host $http_Host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect http:// https://;

    add_header Pragma "no-cache";

    proxy_pass http://jenkins;
  }
}
21
emm

Notez que (à un moment donné?) Jenkins peut générer la clé pour vous, tout ce que vous avez à faire est de définir le paramètre --httpsPort=(portnum) dans JENKINS_ARGS.

Dans mon cas, je mets JENKINS_PORT="-1" (désactivez http) et définissez --httpsPort=8080 qui fonctionnait bien à mes propres fins.

Notez simplement que tout port inférieur à 1000 nécessite généralement un accès root, alors choisissez un port supérieur à celui ...

( Lien pour plus d'informations)

15
Adam Rofer

Pour un serveur Ubuntu (en supposant que vous avez installé avec apt-get install jenkins):

Vous voudrez éditer /etc/default/jenkins en bas du fichier, modifiez Jenkins_args. Dans mes arguments, j'ai désactivé l'accès http (en utilisant -1) et mis SSL sur le port Jenkins par défaut (8080). La partie la plus importante ici est que vous avez envoyé un httpsPort et un certificat/clé (si vous en avez un, sinon vous pouvez les laisser pour l'auto-généré). Je place les crts dans Apache et les utilise ensuite pour les deux, mais vous pouvez les mettre n'importe où.

JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpsPort=$HTTP_PORT --httpPort=-1 --httpsCertificate=/etc/Apache2/ssl.crt/CERT.crt --httpsPrivateKey=/etc/Apache2/ssl.key/KEY.key --ajp13Port=$AJP_PORT"

Dans certains cas, vous devrez utiliser un Java Key Store. Tout d'abord, convertissez vos clés:

openssl pkcs12 -inkey /var/lib/jenkins/jenkins.key.pem -in /var/lib/jenkins/jenkins.crt.pem  -export -out keys.pkcs12

keytool -importkeystore -srckeystore keys.pkcs12 -srcstoretype pkcs12 -destkeystore jenkins.jks

Utilisez maintenant des arguments Jenkins comme

JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpsPort=$HTTP_PORT --httpPort=-1 --httpsKeyStore=/etc/Apache2/ssl.crt/jenkins.jks --httpsKeyStorePassword=thePassword --ajp13Port=$AJP_PORT"

Voir également https://serverfault.com/a/569898/300544

9
Loren