CentOS下安装Jenkins(Docker/war/tomcat/java -jar)

参考官方提供的安装教程: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

说明:

可选jenkinsci/blueocean关闭时自动删除Docker容器(下图中的实例化)。如果您需要退出Jenkins,这可以保持整洁。
2 可选jenkinsci/blueocean在后台运行容器(即“分离”模式)并输出容器ID。如果未指定此选项,则会在终端窗口中输出正在运行的此容器的Docker日志。
3 映射(即“发布”)jenkinsci/blueocean容器的端口8080到主机上的端口8080。第一个数字表示主机上的端口,而最后一个表示容器的端口。因此,如果您-p 49000:8080为此选项指定,则将通过端口49000访问主机上的Jenkins。
可选)将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。
可选但强烈建议使用名称 /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容器,则需要该守护程序如果运行语法包含agentdocker参数部分的声明性管道,则此选项是必需的 - 即
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

参考Oracle Java的这些选项

官方参考:

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

https://ken.io/note/centos7-jenkins-install-tutorial

https://www.cnblogs.com/stulzq/p/9291237.html

 

 

 

 

 

posted @ 2018-11-28 03:28  EasonJim  阅读(1546)  评论(0编辑  收藏  举报