web-dev-qa-db-ja.com

ポート80で実行するようにJenkinsを構成する方法

Ubuntu 11.10を実行しており、Sudo apt-get install jenkinsを実行してこのシステムにJenkinsをインストールしています。

リバースプロキシ(Apache、Nginxなど)のセットアップ方法に関するチュートリアルを見てきましたが、これはVM jenkins専用であり、できるだけ無駄のないようにしたいです。ジェンキンスをポート80で実行している間。

/etc/init/jenkins.confでupstart構成を見つけ、ポートを80 env HTTP_PORT=80に変更しました

service jenkins startを介してjenkinsを起動すると、psは、数秒間実行されてから終了することを示します。

これは、ジェンキンスが特権ポートでjenkinsユーザーとして実行されているためですか?もしそうなら、どうすれば修正できますか?他のアイデアは歓迎します。

Upstartの設定は次のとおりです。

description "jenkins: Jenkins Continuous Integration Server"
author "James Page <[email protected]>"

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

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

次に、上記のスクリプトを変更して($Java_HOME/bin/Java部分の前にauthbindを追加します):

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

新しいUbuntuインストール(14.04)での新しいJenkinsインストール(1.598)の場合、/etc/init.d/jenkinsを編集し、$Javaの前にauthbindを追加します

$SU -l $JENKINS_USER --Shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- authbind $Java $Java_ARGS -jar $JENKINS_WAR $JENKINS_ARGS" || return 2

Alan (下のコメントを参照)で述べたように、IPv6が必要で、システムがQuantalよりも低い場合、apt-getを使用してauthbindをインストールする代わりに上位バージョンをダウンロードできます。 libc6およびlibc6-udebがインストールされていることを確認してください。 Ubuntuのauthbindバージョン2.1.1は次のとおりです。

次に実行します:

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

別の解決策は、単に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.rulesファイルとして再フォーマット:

*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.rulesファイルの利点は、再起動後もルールを保持できることです。他の現在のiptableルールを同じファイルに統合してください。

Redhat/CentOSでは、このファイルは/etc/sysconfig/iptablesに入れることができます。

Debian/Ubuntuシステムでは、/etc/iptables/rules.v4パッケージを使用してiptables-persistentに保存できます。または、/etc/network/interfacesを変更するか、if-up/if-downスクリプトにフックすることにより、iptable.rulesを呼び出すことができます。 buntu Community wiki には、これらの方法を説明した素晴らしいページがあります。

ネットワーキングの場合と同様に、同じ結果を達成するためのさまざまな方法があります。あなたに最適なものを使用してください!

45
Chris Laskey
  1. / etc/defaultフォルダーに移動->ファイル「jenkins」を開きます
  2. HTTP_PORT = 8080の行をHTTP_PORT = 80として変更します
  3. 次のコマンドを使用して、ルートとしてjenkinsを起動します:Sudo /etc/init.d/jenkins start
  4. ブラウザーを開き、localhost:80として参照します

それでおしまい

33
Ripon Al Wasim

Apacheとmod_proxyを使用することをお勧めします。これは私がしていることであり、私のvhost設定はちょっとこのように見えます(私はSSLにもリダイレクトしますが、あなたはそれを省略できます):

<VirtualHost *:443>
ServerAdmin [email protected]
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>
7
regulatethis

docker を使用したため。これを使用して、ポート80でジェンキンを実行できます。以降は、私のスクリプトのスニペットです。

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

これは、次の方法を使用して実現できます。

  1. IPテーブル転送ルール。
  2. Nginxのようなリバースプロキシを使用します。
  3. ロードバランサーの背後でJenkinsを実行します。

方法1:IPテーブル転送ルールを使用して80でJenkinsを実行する

Sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

ここで、これらのルールを保存して、IPtableまたはシステムの再起動後も保持されるようにする必要があります。

Redhatベースのシステムの場合、次を実行します。

Sudo iptables-save > /etc/sysconfig/iptables

Debianベースのシステムの場合、次のコマンドを実行します。

Sudo sh -c "iptables-save > /etc/iptables.rules"

ポート80でJenkinsにアクセスすると、IPテーブルは自動的に要求を8080に転送します。

方法2:Nginxリバースプロキシの背後でJenkinsを実行する

ステップ1:Nginxをインストールする

Sudo yum install nginx

ステップ2:Nginx構成ファイルを開きます。

Sudo vi /etc/nginx/nginx.conf

ステップ3:nginx.confファイルで次のスニペットを見つけます。

location / {
}

ステップ4:中括弧の間に次の行を追加します。

proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

ステップ5:Nginxリバースプロキシに対してSELinuxコマンドを実行します。

Sudo setsebool httpd_can_network_connect 1 -P

ステップ6:Nginxサーバーを再起動します。

Sudo systemctl restart nginx

これで、ポート80でJenkinsにアクセスできるようになります。

方法3:ロードバランサーの背後にあるJenkins

ロードバランサーを追加すると、Jenkinsのセットアップに余分なコストが追加されます。クラウドを使用している場合は、ポート80のすべてのトラフィックをバックエンドのJenkins 8080ポートに送信するクラウド固有のロードバランサーを選択できます。

1
Subhash

私は同じ問題を抱えていて、iptablesを使用してそれに対する最良の解決策を見つけました。

デフォルトでは、Jenkinsはポート8080または8443で実行されます。また、HTTP/HTTPSサーバーはポート80および443で実行されます。

しかし、これは特別なポートであり、それらを使用するプロセスはrootが所有する必要があります。

しかし、Jenkinsをrootとして実行するのは最良の解決策ではありません(独自のユーザーとして実行する必要があります)。

最善の解決策は、Linuxでiptablesを使用してトラフィックを転送することです。

1)次のコマンドを使用して、現在のiptables設定を一覧表示します。

$ iptables -L -n

target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

2)上記のエントリが表示されない場合は、以下のコマンドを実行する必要があります。

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

3)$ iptables -L -nコマンドを再実行し、最初のステップo/pが表示されていることを確認します。

4)最後のステップは、以下のコマンドを実行してポート80のトラフィックを8080に転送し、ポート443のトラフィックを8443に転送することです(HTTPSを使用している場合)。

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

5)これで、URLはポート80のままになります。

詳細は こちら をご覧ください。

1
Pratik Patel

答えはどれも、iptablesで80から8080に単純にリダイレクトする方法を示していません。
幸いなことに、dskrvkのコメントは!

また、 Jenkins wiki これを文書化しています


リダイレクトを機能させるには、端末にこれらの行をコピー/貼り付けするだけでした。

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

ところで、一度テストしたら、サーバーのinitスクリプトに含めることを忘れないでください。そうしないと、再起動後にリダイレクトが失われます。 Debian 8.2(Jessie)でテスト済み

0
Balmipour

ポート8080を80に転送するfirewalldの方法:

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

/ etc/default/jenkinsを変更してもセットアップubunutu 16.-4 Jenkins 2.89.4とiptableルート80から8080を使用するソリューションでは動作しません。

0
Barak

次のコード行を個別に実行します。

Sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
Sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

システムがDebianベースの場合、次を実行します。

Sudo sh -c "iptables-save > /etc/iptables.rules"

システムがRedHatベースの場合:

Sudo iptables-save > /etc/sysconfig/iptables

このプロセスにより、デフォルトのJenkinsポートが8080から80に変更されます。

0
Fatema H. Kazi

Ubuntu 16.04では、 このwiki でその方法を説明しています。

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を実行してポート転送を有効にします

0
Katu