ubuntu - 如何配置 Jenkins 运行在 80 端口

标签 ubuntu continuous-integration hudson jenkins upstart

我正在运行 Ubuntu 11.10 并运行 sudo apt-get install jenkins 在此系统上安装 Jenkins。

我看过一些关于如何设置反向代理(Apache、Nginx 等)的教程,但这是专用于 jenkins 的 VM,我希望在让 jenkins 在端口上运行时尽可能保持精简80.

我在 /etc/init/jenkins.conf 中找到了 upstart 配置并将端口修改为 80 env HTTP_PORT=80

当我通过 service jenkins start 启动 jenkins 时,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

最佳答案

另一种解决方案是简单地使用 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 系统上,它们可以通过使用 iptables-persistent 包保存在 /etc/iptables/rules.v4 中。或者可以通过修改 /etc/network/interfaces 或挂接到 if-up/if-down 脚本来调用 iptable.rules。 Ubuntu Community wiki有一个很棒的页面解释这些方法。

与网络通常的情况一样,有很多不同的方法可以实现相同的结果。使用最适合您的方法!

关于ubuntu - 如何配置 Jenkins 运行在 80 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330367/

相关文章:

bash - 如果文件夹或其子文件夹包含特定文件(bash),则移动文件夹

来自旧硬盘系统的 mysql datadir 无法启动

apache - Chrome 想要下载 index.php

java - 持续集成 : ensure new commits are covered with tests

ruby - 如何修复因编码错误 : "\xD8" on US-ASCII? 而失败的 Ruby 脚本

python - 使用 python 压缩所有子目录

Jenkins 使用基于主干的开发时构建

continuous-integration - 你能和 hudson 一起做吗?

maven - Hudson 构建错误 : LifecycleExecutionException Unable to locate the Javac Compiler in

java - hudson 艾玛插件