Comment configurer Jenkins pour qu'il tourne sur le port 80
je lance Ubuntu 11.10 et j'ai lancé sudo apt-get install jenkins
pour installer Jenkins sur ce système.
j'ai vu quelques tutoriels sur la façon de configurer un mandataire inversé (Apache, Nginx, etc), mais c'est une VM dédiée à jenkins et j'aimerais la garder aussi allégée que possible tout en ayant jenkins tournant sur le port 80.
j'ai trouvé la config upstart dans /etc/init/jenkins.conf
et modifié le port à 80 env HTTP_PORT=80
quand je commence jenkins via service jenkins start
, ps
révèle qu'il court pendant quelques secondes puis se termine.
est-ce parce que jenkins est l'utilisateur jenkins
sur un port privilégié? Si oui, comment puis-je arranger cela? Toutes les autres idées de bienvenue.
Voici la config upstart:
description "jenkins: Jenkins Continuous Integration Server"
author "James Page <james.page@ubuntu.com>"
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]
env USER="jenkins"
env GROUP="jenkins"
env JENKINS_LOG="/var/log/jenkins"
env JENKINS_ROOT="/usr/share/jenkins"
env JENKINS_HOME="/var/lib/jenkins"
env JENKINS_RUN="/var/run/jenkins"
env HTTP_PORT=80
env AJP_PORT=-1
env JAVA_OPTS=""
env JAVA_HOME="/usr/lib/jvm/default-java"
limit nofile 8192 8192
pre-start script
test -f $JENKINS_ROOT/jenkins.war || { stop ; exit 0; }
$JENKINS_ROOT/bin/maintain-plugins.sh
mkdir $JENKINS_RUN > /dev/null 2>&1 || true
chown -R $USER:$GROUP $JENKINS_RUN || true
end script
script
JENKINS_ARGS="--webroot=$JENKINS_RUN/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT"
exec daemon --name=jenkins --inherit --output=$JENKINS_LOG/jenkins.log --user=$USER
-- $JAVA_HOME/bin/java $JAVA_OPTS -jar $JENKINS_ROOT/jenkins.war $JENKINS_ARGS
--preferredClassLoader=java.net.URLClassLoader
end script
9 réponses
Donner un essai à authbind ':
sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown jenkins /etc/authbind/byport/80
modifier ensuite le script ci-dessus pour avoir (ajouter authbind
avant la $JAVA_HOME/bin/java
partie):
exec daemon --name=jenkins --inherit --output=$JENKINS_LOG/jenkins.log \
--user=$USER -- authbind $JAVA_HOME/bin/java $JAVA_OPTS \
-jar $JENKINS_ROOT/jenkins.war $JENKINS_ARGS \
--preferredClassLoader=java.net.URLClassLoader
Pour les nouveaux Jenkins installations (1.598) sur les nouveaux Ubuntu installations (14.04) edit /etc/init.d/jenkins
et d'ajouter authbind
avant $JAVA
$SU -l $JENKINS_USER --shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- authbind $JAVA $JAVA_ARGS -jar $JENKINS_WAR $JENKINS_ARGS" || return 2
comme mentionné par Alan (voir commentaire ci-dessous)) si vous avez besoin D'IPv6 et que votre système est inférieur à Quantal, vous pouvez télécharger une version plus élevée au lieu d'utiliser apt-get
pour installer authbind
.
Assurez-vous d'avoir installé libc6
et libc6-udeb
. Voici authbind
version 2.1.1 de Ubuntu:
puis exécuter:
sudo dpkg -i authbind_2.1.1_amd64.deb
# or sudo dpkg -i authbind_2.1.1_i386.deb
sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown jenkins /etc/authbind/byport/80
une autre solution consiste simplement à utiliser iptables pour réacheminer le trafic entrant de 80 à 8080. Les règles ressembleraient à:
-A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
-A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
reformaté en iptables.fichier de règles:
*filter
:INPUT ACCEPT [100:100000]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [95:9000]
-A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
COMMIT
*nat
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
COMMIT
L'avantage d'un iptable.fichier de règles est la règle peut persister après redémarrage. Assurez-vous juste d'intégrer toutes les autres règles iptable dans le même fichier!
sur Redhat / CentOS ce fichier peut aller dans /etc/sysconfig/iptables
.
sur les systèmes Debian/Ubuntu, ils peuvent être sauvegardés dans /etc/iptables/rules.v4
en utilisant le paquet iptables-persistent
. Ou la iptable.les règles peuvent être appelées en modifiant /etc/network/interfaces
ou en se raccordant aux scripts if-up
/ if-down
. Le Ubuntu Community wiki a une grande page expliquant ces méthodes.
comme c'est habituellement le cas avec le réseautage, il y a beaucoup de façons différentes d'accomplir le même résultat. Utilisez ce qui fonctionne le mieux pour vous!
- Allez à /etc/default dossier --> Ouvrir le fichier "jenkins"
- modifier la ligne HTTP_PORT = 8080 comme HTTP_PORT = 80
- lancer jenkins comme root en utilisant la commande: sudo / etc / init.d/jenkins démarrer
- ouvrir un navigateur et naviguer comme localhost: 80
que c'est
je suggère d'utiliser apache et mod_proxy. C'est ce que je fais, et ma configuration vhost ressemble un peu à ceci (je redirige aussi pour SSL mais vous pouvez omettre cela):
<VirtualHost *:443>
ServerAdmin webmaster@example.com
ServerName ci.example.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreservehost on
ProxyPass / http://localhost:8080/
Header edit Location ^http://ci.example.com/ https://ci.example.com/
SSLEngine on
SSLCertificateFile /etc/apache2/keys/apache.pem
</VirtualHost>
depuis que j'ai utilisé docker . Vous pouvez l'utiliser pour exécuter jenkins sur le port 80, ci-après un extrait de mon script:
JENKINS_PORT=80
JENKINS_HOME=/home/jenkins
/usr/bin/docker run -d -p $JENKINS_PORT:8080 -v $JENKINS_HOME jenkins
la firewalld moyen de rediriger le port 8080 à 80:
yum install firewalld
systemctl start firewalld
chkconfig firewalld on
firewall-cmd --permanent --zone=external --change-interface=eth0
firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
aucune des réponses ne dit comment rediriger simplement 80 à 8080 avec iptables.
Heureusement, le commentaire de dskrvk
le fait !
il y a aussi un Jenkins wiki documentant ce
J'ai juste dû copier / coller ces lignes dans mon terminal pour que la redirection fonctionne:
sudo iptables -I INPUT 1 -p tcp --dport 8443 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
Btw, n'oubliez pas de l'inclure à votre serveur scripts d'initialisation une fois testé, ou vous perdrez la redirection après un redémarrage. testé sur Debian 8.2 (Jessie)
dans Ubuntu 16.04, ce wiki explique comment le faire.
sudo nano /etc/rc.local
puis ajouter ce qui suit juste avant la sortie 0
#Requests from outside
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
#Requests from localhost
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
redémarrez maintenant ou lancez sudo /etc/rc.local
pour activer le réacheminement de port
modification de /etc/default/jenkins ne fonctionne pas sur ma configuration ubunutu 16.-4 Jenkins 2.89.4 et la solution pour utiliser les routes iptables 80 à 8080 whis le contraire du résultat requis de jenkins sur 80