haf*_*huk 48 ubuntu continuous-integration hudson upstart jenkins
我正在运行Ubuntu 11.10并且已经运行sudo apt-get install jenkins
在这个系统上安装Jenkins.
我已经看过一些关于如何设置反向代理(Apache,Nginx等)的教程,但是这是一个专门用于jenkins的VM,我希望在jenkins在端口80上运行时保持尽可能精简.
我找到了upstart配置/etc/init/jenkins.conf
并将端口修改为80env HTTP_PORT=80
当我启动jenkins via时service jenkins start
,ps
显示它运行了几秒钟然后终止.
这是因为jenkins作为jenkins
特权端口上的用户运行吗?如果是这样,我该如何解决这个问题?欢迎任何其他想法.
这是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
Run Code Online (Sandbox Code Playgroud)
Chr*_*key 45
另一种解决方案是简单地使用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
Run Code Online (Sandbox Code Playgroud)
重新格式化为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
Run Code Online (Sandbox Code Playgroud)
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 .在Ubuntu社区的wiki有一个伟大的网页解释这些方法.
与网络通常的情况一样,有很多不同的方法可以实现相同的结果.使用最适合你的方法!
Rip*_*sim 33
而已
JSc*_*Ced 29
试试' 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
Run Code Online (Sandbox Code Playgroud)
然后修改上面的脚本(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
Run Code Online (Sandbox Code Playgroud)
对于较新的Ubuntu安装(14.04)上较新的Jenkins安装(1.598),请在之前编辑/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
Run Code Online (Sandbox Code Playgroud)
正如Alan所提到的(请参阅下面的评论)如果您需要IPv6并且您的系统低于Quantal,您可以代替使用apt-get
安装authbind
下载更高版本.请确保您有libc6
和libc6-udeb
安装.这是authbind
来自Ubuntu的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
Run Code Online (Sandbox Code Playgroud)
我建议使用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>
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法实现此目的。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
Run Code Online (Sandbox Code Playgroud)
现在,您应该保存这些规则,以便即使在 IPtable 或系统重新启动后它也能持续存在。
对于基于 Redhat 的系统,运行以下命令。
sudo iptables-save > /etc/sysconfig/iptables
Run Code Online (Sandbox Code Playgroud)
对于基于 Debian 的系统,执行以下命令。
sudo sh -c "iptables-save > /etc/iptables.rules"
Run Code Online (Sandbox Code Playgroud)
现在,如果您在端口 80 上访问 Jenkins,IP 表将自动将请求转发到 8080。
第一步:安装Nginx
sudo yum install nginx
Run Code Online (Sandbox Code Playgroud)
第二步:打开Nginx配置文件。
sudo vi /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)
第 3 步:在 nginx.conf 文件中找到以下代码段。
location / {
}
Run Code Online (Sandbox Code Playgroud)
第 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;
Run Code Online (Sandbox Code Playgroud)
第五步:对Nginx反向代理执行SELinux命令。
sudo setsebool httpd_can_network_connect 1 -P
Run Code Online (Sandbox Code Playgroud)
第六步:重启Nginx服务器。
sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)
现在,如果您将能够在端口 80 上访问 Jenkins。
添加负载均衡器会增加 Jenkins 设置的额外成本。如果您在云上,您可以选择特定于云的负载均衡器,它将所有端口 80 流量发送到后端 Jenkins 8080 端口。
归档时间: |
|
查看次数: |
66394 次 |
最近记录: |