Как настроить Jenkins для работы на порту 80

Я запускаю Ubuntu 11.10 и запустил sudo apt-get install jenkins для установки Дженкинса в этой системе.

Я видел некоторые учебники о том, как настроить обратный прокси (Apache, Nginx и т. д.), Однако это VM, предназначенный только для Дженкинса, и я хотел бы сохранить его как можно более бережливым, имея Дженкинса, работающего на порту 80.

Я нашел конфигурацию выскочки в /etc/init/jenkins.conf и изменил порт 80 env HTTP_PORT=80

когда я начинаю Дженкинс через service jenkins start, ps показывает, что он работает на несколько секунд затем заканчивается.

это потому, что Дженкинс работает как jenkins пользователь на привилегированном порту? Если да, то как это исправить? Любые другие идеи приветствуются.

вот конфигурация выскочки:

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 ответов


дать попробовать '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

затем измените скрипт выше, чтобы иметь (add authbind до $JAVA_HOME/bin/java часть):

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

для новых установок Jenkins (1.598) на новых установках Ubuntu (14.04) edit /etc/init.d/jenkins и добавить authbind до $JAVA

$SU -l $JENKINS_USER --shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- authbind $JAVA $JAVA_ARGS -jar $JENKINS_WAR $JENKINS_ARGS" || return 2

как отметил Алан (см. комментарий ниже) Если вам нужен IPv6, и ваша система ниже, чем Quantal, вы можете вместо использования apt-get в установить authbind скачать более новую версию. Убедитесь, что у вас есть libc6 и libc6-udeb установлен. Вот authbind версия 2.1.1 от Ubuntu:

выполнить:

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

другое решение-просто использовать iptables для перенаправления входящего трафика с 80 на 8080. Правила будут выглядеть так:

-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

переформатирован как iptables.файл правил:

*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

преимущество iptable.файл правил-это правила, которые могут сохраняться после перезагрузки. Просто не забудьте интегрировать любые другие текущие правила iptable в тот же файл!

на Redhat / CentOS этот файл может войти в /etc/sysconfig/iptables.

в системах Debian / Ubuntu они могут быть сохранено в /etc/iptables/rules.v4 С помощью iptables-persistent пакета. Или iptable.правила можно вызвать, изменив /etc/network/interfaces или зацепиться за if-up/if-down скрипты. The Ubuntu сообщество wiki имеет большую страницу, объясняющую эти методы.

как это обычно бывает с сетью, есть много разных способов достичь того же результата. Используйте то, что работает лучше всего для вас!


  1. перейдите в папку /etc/default --> откройте файл"jenkins"
  2. измените строку HTTP_PORT=8080 как HTTP_PORT=80
  3. запустите jenkins как root, используя команду: sudo/etc / init.д/Дженкинс старт
  4. откройте браузер и просмотрите как localhost: 80

вот это


Я бы предложил использовать apache и mod_proxy. Это то, что я делаю, и моя конфигурация vhost выглядит примерно так (я также перенаправляю для SSL, но вы можете опустить это):

<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>

С настройки. Вы можете использовать его для запуска Дженкинса на порту 80, далее фрагмент моего скрипта:

JENKINS_PORT=80
JENKINS_HOME=/home/jenkins
/usr/bin/docker run -d -p $JENKINS_PORT:8080 -v $JENKINS_HOME jenkins

путь firewalld к переднему порту 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

ни один из ответов не говорит, как просто перенаправить 80 на 8080 с iptables.
К счастью, dskrvk комментарий делает !

есть еще Дженкинс Вики эти


Мне просто нужно было скопировать / вставить эти строки в мой терминал, чтобы заставить перенаправление работать:

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

кстати, не забудьте включить его в сценарии инициализации вашего сервера после тестирования,или вы потеряете перенаправление после перезагрузки. проверено на Debian 8.2 (Jessie)


В Ubuntu 16.04, Вики объясняет как это делать.

sudo nano /etc/rc.local

затем добавьте следующее непосредственно перед выходом 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

Перезагрузить сейчас или запустите sudo /etc/rc.local включить переадресацию портов


изменение /etc/default / jenkins не работает в моей настройке ubunutu 16.-4 Jenkins 2.89.4 и решение использовать iptable routes 80 до 8080, что противоположно требуемому результату запуска jenkins на 80