参考官方提供的安装教程:https://jenkins.io/doc/book/installing/,可以发现官方推荐使用Docker进行安装。虽然用Docker有很多好处,但也有缺点。
下面是各种安装方法:
无论怎么的安装方法,jenkins在启动时,都会在运行用户的目录下生成.jenkins文件夹,此文件夹用于存放配置和项目文件,因此,想要备份和迁移jenkins的可以在此文件夹入手。
一、Docker
Docker运行简单,无需关心Java环境,但弊端是不能使用Docker版的Jenkins来打包Docker,但可以使用子节点的形式来实现。还有就是Docker启东市参数的配置其实是比较少的,没那么灵活。其实研究到最后你会发现它的运行也就是java -var jenkins.war的形式,那么可以通过改写容器里面的进程启动参数来增加可配置参数的灵活性。
# 下载镜像
# 最新版
docker pull jenkinsci/blueocean
# 指定版
# docker pull jenkinsci/blueocean:1.3.6 # 运行
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
说明:
1 (可选) jenkinsci/blueocean
关闭时自动删除Docker容器(下图中的实例化)。如果您需要退出Jenkins,这可以保持整洁。2 (可选) jenkinsci/blueocean
在后台运行容器(即“分离”模式)并输出容器ID。如果未指定此选项,则会在终端窗口中输出正在运行的此容器的Docker日志。3 映射(即“发布”) jenkinsci/blueocean
容器的端口8080到主机上的端口8080。第一个数字表示主机上的端口,而最后一个表示容器的端口。因此,如果您-p 49000:8080
为此选项指定,则将通过端口49000访问主机上的Jenkins。4 (可选)将 jenkinsci/blueocean
容器的端口50000 映射到主机上的端口50000。只有在其他计算机上设置了一个或多个基于JNLP的Jenkins代理时才需要这样做,而这些代理又与jenkinsci/blueocean
容器交互(充当“主”Jenkins服务器,或简称为“Jenkins master”)。基于JNLP的Jenkins代理默认通过TCP端口50000与Jenkins主机通信。您可以通过“配置全局安全性” 页面更改Jenkins主服务器上的此端口号。如果您要将JNSLP代理的 Jenkins主服务器TCP端口 值更改为51000(例如),那么您需要重新运行Jenkins(通过此docker run …
命令)并指定此“发布”选项,例如-p 52000:51000
,其中最后一个值与Jenkins主服务器上的此更改值匹配,第一个值是Jenkins主服务器上的端口号,基于JNLP的Jenkins代理通过该端口号与Jenkins主服务器进行通信 - 即52000。5 (可选但强烈建议)使用名称 /var/jenkins_home
将容器中的目录映射到Docker 卷jenkins-data
。如果此卷不存在,则此docker run
命令将自动为您创建卷。如果您希望每次重新启动Jenkins时都保持Jenkins状态(通过此docker run …
命令),则需要此选项 。如果未指定此选项,则Jenkins将在每次重新启动后有效地重置为新实例。
注意: 所述的jenkins-data
体积也可以独立地使用所创建的docker volume create
:命令docker volume create jenkins-data
代替映射/var/jenkins_home
在Docker卷的目录中,您还可以将此目录映射到计算机本地文件系统上的目录。例如,指定该选项-v $HOME/jenkins:/var/jenkins_home
会将容器的/var/jenkins_home
目录映射 到 本地计算机上目录中的jenkins
子目录,该子目录$HOME
通常为/Users/<your-username>/jenkins
或/home/<your-username>/jenkins
。6 (可选) /var/run/docker.sock
表示Docker守护程序通过其侦听的基于Unix的套接字。此映射允许jenkinsci/blueocean
容器与Docker守护程序通信,如果jenkinsci/blueocean
容器需要实例化其他Docker容器,则需要该守护程序。如果运行语法包含agent
带docker
参数的部分的声明性管道,则此选项是必需的 - 即agent { docker { … } }
。在Pipeline Syntax页面上阅读更多相关信息 。7 jenkinsci/blueocean Docker镜像
。如果尚未下载此镜像,则此docker run
命令将自动为您下载镜像。此外,如果自上次运行此命令后发布了对此映像的任何更新,则再次运行此命令将自动为您下载这些已发布的映像更新。
注意:也可以使用以下docker pull
命令单独下载(或更新)此Docker镜像 :docker pull jenkinsci/blueocean
文件主目录:
上面安装指定了-v jenkins-data:/var/jenkins_home,那么此时在Docker容器目录已经变了,不再是用户目录下的.jenkins文件夹,变成/var/jenkins_home文件夹;当这个选项没有填写时才是默认的.jenkins文件夹。如果想要变成宿主机也有这个文件夹映射,需要这样写-v /var/jenkins_home:/var/jenkins_home。
查看日志:
此时的日志没有在容器里没有指定的位置,所以只能通过docker logs <name>进行日志的查看。
二、Tomcat部署war包
这个方法最简单,直接交给tomcat容器,并且jvm参数这些也同样由tomcat进行配置;那么此时可以配置的选项已经有所折扣,主目录默认放在用户目录下的.jenkins文件夹;而进入系统设置后会提示“代理服务器设置错误”等信息,且无法修复。
# 在此地址下载war包http://mirrors.jenkins.io/war-stable/
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war -O jenkins.war
# 移动到tomcat目录
mv jenkins.war $TOMAT_HOME/webapps/
# 最后访问地址
http://$TOMCAT_IP:$TOMCAT_PORT/jenkins
主目录:
可以修改,不过需要结合Tomcat的启动脚本,把这些参数加上去:
日志:
变成这个:/data/service/tomcat/logs/catalina.out
官方参考:
https://wiki.jenkins.io/display/JENKINS/Tomcat
三、yum源安装
这个应该是网上最多人用的方式,其运行原理也就是java -jar jenkins.war,同时你只能通过这种方式安装最新版本,某些指定版本不一定可以安装的到,当然这都是可以解决的,比如在这里https://pkg.jenkins.io/redhat-stable/下载特定的RPM包进行安装即可,同样RPM包没有那么多指定版本可以选择,但可以下载war包替换即可实现指定版本的安装;并且需要JDK的路径必须为如下所示:
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java/usr/bin/java
安装好后的文件如下:
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
安装脚本:
# 安装依赖
yum install -y epel-release
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key # 安装jenkins
yum install jenkins
主目录:
在配置文件/etc/sysconfig/jenkins下进行配置,默认为:/var/lib/jenkins,同时这个文件也是可以配置jenkins的启动参数等。
日志:
在目录/var/log/jenkins下
官方参考:
https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions
四、war包的java -jar运行
目前这种方式应该是最好的,采用java -jar的运行,参数可以随意指定,此运行时基于jetty的容器。
# 下载war包
# 在此地址下载war包http://mirrors.jenkins.io/war-stable/
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war -O jenkins.war
使用nohup进行运行,此方法可以指定控制台的日志输出位置,其实上面几种方式都是这样的方式输出日志的:
nohup java -jar jenkins.war > /tmp/jenkins.log 2>&1
命令参数如下:
命令行参数
Jenkins通常使用端口8080启动。但是,如果启动了其他Web服务,您可能会发现此端口已被占用。您可以使用希望Jenkins运行的端口
--httpPort=
$HTTP_PORT
在哪里指定其他端口$HTTP_PORT
。其他命令行参数包括:
命令行参数
描述
-help 显示所有可用选项及其用法 --httpPort=$HTTP_PORT
使用标准http协议在端口$HTTP_PORT上运行Jenkins侦听器。默认端口为8080.要禁用(因为您使用的是https),请使用端口
-1
。此选项不会影响在Jenkins逻辑(UI,JNLP文件等)中生成的根URL; 它由全局配置中指定的Jenkins URL定义。--httpListenAddress=$HTTP_HOST
将Jenkins绑定到$HTTP_HOST表示的IP地址。默认值为0.0.0.0 - 即侦听所有可用接口。
例如,要仅侦听来自localhost的请求,您可以使用: - httpListenAddress=127.0.0.1--httpsPort=$HTTP_PORT
在端口$HTTP_PORT上使用HTTPS协议。此选项不会影响在Jenkins逻辑(UI,JNLP文件等)中生成的根URL; 它由全局配置中指定的Jenkins URL定义。
--httpsListenAddress=$HTTPS_HOST
绑定Jenkins以侦听$HTTPS_HOST表示的IP地址上的HTTPS请求。
--http2Port=$HTTP_PORT 在端口$HTTP_PORT上使用HTTP/2协议。此选项不会影响在Jenkins逻辑(UI,JNLP文件等)中生成的根URL; 它由全局配置中指定的Jenkins URL定义。 --http2ListenAddress=$HTTPS_HOST 绑定Jenkins以侦听$HTTPS_HOST表示的IP地址上的HTTP/2请求。 --prefix=$PREFIX
运行Jenkins以在URL末尾包含$PREFIX。
例如,要使Jenkins可以访问,请设置--prefix=/jenkins
http
://
myServer
:8080/jenkins
--ajp13Port=$AJP_PORT
使用标准AJP13协议在端口$AJP_PORT上运行Jenkins监听器。默认值为端口8009.要禁用(因为您使用的是https),请使用端口
-1
。--ajp13ListenAddress=$AJP_HOST
将Jenkins绑定到$AJP_HOST表示的IP地址。默认值为0.0.0.0 - 即侦听所有可用接口。
--argumentsRealm.passwd.$ADMIN_USER
设置用户$ADMIN_USER的密码。如果启用了Jenkins安全性,则必须以$ADMIN_USER身份登录才能配置Jenkins或Jenkins项目。注意:您还必须指定此用户具有管理员角色。(见下面的下一个论点)。
--argumentsRealm.roles.$ADMIN_USER=admin
设置$ADMIN_USER是管理用户,如果启用了Jenkins的安全性,则可以配置Jenkins。有关更多信息,请参阅保护Jenkins。
--sessionTimeout=$SESSION_TIMEOUT 将http会话超时值设置为$SESSION_TIMEOUT分钟。默认为webapp指定的内容,然后是60分钟
--useJmx 启用Jetty JMX(参见文档) -Xdebug -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n
设置调试开启,您可以访问$DEBUG_PORT上的调试。
-logfile=$LOG_PATH/winstone_`date +“%Y%m-%d_%H-%M”`.log
记录到所需的文件
-XX:PermSize=512M -XX:MaxPermSize=2048M -Xmn128M -Xms1024M -Xmx2048M
官方参考:
https://wiki.jenkins.io/display/JENKINS/Starting+and+Accessing+Jenkins
五、反向代理设置
其实无需在Jenkins的jetty容器配置SSL,只需在Nginx配置即可。
# 普通方向代理
server {
listen 80;
server_name www.jenkins.com; client_max_body_size 200m; location / {
sendfile off;
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
proxy_http_version 1.1; 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;
proxy_max_temp_file_size 0; #this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k; proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54
proxy_set_header Connection ""; # Clear for keepalive
}
}
SSL反向代理
server {
listen 443;
server_name www.jenkins.com;
ssl on;
root html;
index index.html index.htm;
ssl_certificate /data/service/nginx_vhost/cert/215082065120461.pem;
ssl_certificate_key /data/service/nginx_vhost/cert/215082065120461.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
sendfile off;
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
proxy_http_version 1.1; 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;
proxy_max_temp_file_size 0; #this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k; proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54
proxy_set_header Connection ""; # Clear for keepalive
}
}
官方参考:
https://wiki.jenkins.io/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy
六、总结
1、war包使用java -jar运行其实是个趋势,Docker虽然快,但也有弊端。
2、yum其实配置最好,什么项都非常清晰,只是目录规划不能自定义,需要后期维护。
3、war包直接运行最灵活,要什么参数都可以自行配置。
4、tomcat部署最弱,依托于tomcat容器后续配置可能要兼顾考虑。
5、每个版本的安装各有千秋,适合自己的才是最好的。我个人觉得yum安装还是不错的,至少配置是标准的。
6、对于运行的用户来说,root无疑是最爽的,但存在风险,容易rm -rf /,但想一想,对于这种情况强制分配权限就可以解决,但可能会存在BUG,如果确实要做,可以通过新建jenkins用户实现。
七、一键安装脚本
https://github.com/easonjim/centos-shell/tree/master/jenkins
参考:
https://www.blazemeter.com/blog/how-to-install-jenkins-on-the-apache-tomcat-server(tomcat)
https://www.vultr.com/docs/how-to-install-jenkins-on-centos-7(yum)
https://jenkins.io/doc/book/installing/(官方教程)
https://blog.whsir.com/post-2505.html