Jenkins安装

 一, Jenkins简介


 

 1.开源自动化持续集成与部署平台

  • CI, 持续集成
  • CD, 持续部署

2.Jenkins支持的任务类型

  • 自由风格任务
  • 流水线(Pipeline)
  • Maven 项目
  • 多配置项目
  • 多分支流水线任务

3.Jenkins常见的任务功能

  • 定时任务
  • Pull SCM -- 定时检查代码库中的代码有没有更新, 指定的分支或者targe有没有更新, 有更新将继续执行里面的步骤, 没有更新就不会执行;
  • Trigger(by Gitlab, JIRA...) -- 可以被其它的一些服务或插件触发的, 比如 gitlab, jira 有变更就会自动触发其中的任务;
  • 主动/被动触发其它任务
  • 被其它任务触发
  • WEB UI, 命令行, API

4.Jenkins应用场景

  • 将项目的代码拉到本地编译后发布到指定的环境\
    • 过程包括
      • 拉代码
      • 预处理(如修改, 替换或删除文件) -- <有的公司可能不需要开发看到数据库的密码等, 在这一步可以替换掉>
      • 编译(如果需要)
      • 通过 Sonar 进行代码审查 -- 第三方开源的代码质量审查软件, 自动扫描代码中的语法, 分析漏洞等, 并且提供一些优化的建议;
      • 构建 Docker 镜像
      • 推送到 Harbor 仓库
      • 控制 K8s 应用更新
      • 自动化测试
  • 执行简单的命令 -- 一般在服务器中运用到的命令, 在 Jenkins 中都可以使用;

二,Jenkins运行环境


 

  • 系统:Centos 7
  • 域名(自定义):https://jenkins.zxjr.com
  • 防火墙: 开放 443 端口
  • Java: openjdk-1.8
  • Nginx:1.18.0, 启用 SSL 支持
  • Jenkins: 2.120 (非稳定版) <后面实现升级>
  • User:jenkins, uid=1212, gid=1212
  • 目录设置定义  /data/app/jenkins
    • home          JENKINS_HOME--运行的家目录, 主要是一些任务的配置;
    • log                   Jenkins 日志目录
    • run                  Jenkins.jar & 节点启动脚本
    • scripts             Shell, Broovy 脚本目录
    • dockerfiles      Dockerfile & k8s yaml

三,Nginx安装并启用SSL支持


 

1.首先访问nginx官网,下载稳定版本

          

 

 

 

2.复制nginx的链接地址, 并在Centos中相应的目录进行下载, 并下载相应的依赖包(pcre/openssl)

// 进入源码包放置目录
cd /usr/local/src
// 下载nginx源码包保存本地
curl -O http://nginx.org/download/nginx-1.18.0.tar.gz
// 下载 openssl 源码包
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
// 下载 pcre 源码包
curl -O ftp://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

// 解压源码包
for i in `ls /usr/local/src`;do tar xf $i; done

// 编译安装 nginx
yum -y install gcc gcc-c++ make
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-openssl=../openssl-1.1.1g --with-pcre=/usr/local/src/pcre-8.44

    // 报错
    # ./configure: error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-http_gzip_module
    option, or install the zlib library into the system, or build the zlib library
    statically from the source with nginx by using --with-zlib=<path> option.
    // gzip需要依赖zlib库, 需要安装, 
    // 方法一: 使用yum进行安装 --- yum -y install zlib-devel
    // 方法二: 源码安装, zlib-1.2.11.tar.gz 从17年就一直没有再更新了.
    wget http://www.zlib.net/zlib-1.2.11.tar.gz
    tar xf zlib-1.2.11.tar.gz && cd zlib-1.2.11 && ./configure && make && make install

// 安装完成后再执行nginx的与配置        启用ssl模块                用于显示nginx状态(连接数,处理进程的数量, 等待的数量. 一般用于nginx 监控
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-openssl=../openssl-1.1.1g --with-pcre=/usr/local/src/pcre-8.44
make && make install

// 查看nginx 安装目录, 确定安装完毕, 并查看 nginx 命令的大小
ls /usr/local/nginx/
  conf  html  logs  sbin
ll -h /usr/local/nginx/sbin/nginx
  -rwxr-xr-x 1 root root 7.5M May 21 21:53 /usr/local/nginx/sbin/nginx

 

 

 

3.Nginx 配置

// 创建nginx用户,不创建家目录,不能登录系统
useradd -M -s /sbin/nologin nginx

// nginx配置文件放置目录,default结尾的为默认的配置文件(备份)
// 编辑 nginx 配置文件, 重新编写
vim /usr/local/nginx/conf/nginx.conf
user    nginx nginx;
worker_processes    1;
error_log    logs/error.log    info;
pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections    65535;
}

http {
    include            mime.types;
    default_type    application/octet-stream;
    log_format    default '$remote_addr $remote_port $remote_user $time_iso8601 $status $body_bytes_sent '
                        '"$request" "$request_body" "$http_referer" "$http_user_agent" "$http_x_forwarded for"'

    fastcgi_send_timeout            300;
    fastcgi_read_timeout            300;
    fastcgi_buffer_size                64k;
    fastcgi_buffers                8    32k;
    fastcgi_busy_buffers_size        128k;
    fastcgi_temp_file_write_size    128k;

    sendfile            on;
    keepalive_timeout    65;
    gzip                on;
    gzip_min_length        1k;
    gzip_buffers      4 16k;
    gzip_http_version    1.0;
    gzip_comp_level        2;
    gzip_types            text/plain application/x-javascript text/css application/xml text/vnd.wap.wml;
    gzip_vary            on;
    open_file_cache        max=3276 inactive=20s;
    open_file_cache_min_uses    1;
    open_file_cache_valid        30s;

    proxy_ignore_client_abort    on;
    
    client_max_body_size        1G;
    client_body_buffer_size        256k;
    proxy_connect_timeout        30;
    proxy_send_timeout            30;
    proxy_read_timeout            60;
    proxy_buffer_size            256k;
    proxy_buffers             4    256k;
    proxy_busy_buffers_size        256k;
    proxy_temp_file_write_size    256k;
    proxy_http_version            1.1;

    include vhosts/*.conf;
}
// 检查配置文件的正确性
/usr/local/nginx/sbin/nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

// 在放置配置文件的conf目录下创建 ssl 及 vhosts 目录
cd /usr/local/nginx/conf
mkdir ssl vhosts

// 进入ssl目录, 生成证书
cd ssl
openssl genrsa -aes256 -passout pass:111111 -out jenkins.key 2048
openssl rsa -passin pass:111111 -in jenkins.key -out jenkins.com.key
openssl genrsa -aes256 -passout pass:111111 -out jenkins.key 2048
openssl x509 -req -sha256 -days 3655 -in jenkins.com.csr -signkey jenkins.com.key -out jenkins.com.pem

// 进入vhosts目录,创建zxjr.jenkins.com.conf
cd ../vhosts
vim zxjr.jenkins.com.conf
server {
    listen            80;
    server_name        zxjr.jenkins.com;

    rewrite ^(.*)$    https://$host$1 permanent;
}

server {
    listen            443 ssl;
    server_name        zxjr.jenkins.com;
    
    ssl_certificate        /usr/local/nginx/conf/ssl/jenkins.com.pem;
    ssl_certificate_key    /usr/local/nginx/conf/ssl/jenkins.com.key;
    
    access_log            /data/logs/nginx/jenkins_access.log default;

    location / {
        proxy_pass            http://127.0.0.1:8080;
        proxy_http_version    1.1;
        proxy_set_header    Host $host;
        proxy_redirect        off;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout    10s;
        proxy_read_timeout        60s;
        proxy_send_timeout        60s;
    }
}

# 创建日志目录
mkdir -p /data/logs/nginx

 

 

四,Jenkins 安装


 1.基于tomcat部署

Ⅰ.下载jenkins的war包及tomcat源码包

 

// 清华大学开源软件镜像源
https://mirrors.tuna.tsinghua.edu.cn/

// 下载 jenkins.war
wget -P /usr/local/src/ https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/jenkins.war
// 下载 tomcat 源码包
wget -P /usr/local/src/ https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz

 

 

Ⅱ.部署 java

// 使用 yum 部署java环境
yum search openjdk
yum -y install java-1.8.0-openjdk

 

 

Ⅲ.部署tomcat环境

// 创建 jenkins 用户,指定 uid
useradd -u 1212 jenkins

// 创建Jenkins相应目录
mkdir /usr/local/jenkins/{dockerfile,home,log,run,scripts} -pv

// 解压tomcat到指定目录
tar xf /usr/local/src/apache-tomcat-9.0.36.tar.gz -C /usr/local/jenkins/run/
cd /usr/local/jenkins/run/
mv apache-tomcat-9.0.36/ tomcat

// 修改jenkins目录的属主
chown -R jenkins /usr/local/jenkins/*

// 删除tomcat中无用的文件
cd tomcat
rm -f *.txt *.md LICENSE NOTICE RELEASE-NOTES
rm -f bin/*.bat

// 将jenkins的war包放到tomcat的应用程序目录中
mv /usr/local/src/jenkins.war webapps/

// 添加 JENKINS_HOME 环境变量
echo -e "\nexport JENKINS_HOME=/usr/local/jenkins/home" >> /etc/profile

// 切换到 jenkins 用户, 启动 tomcat
su - jenkins
/usr/local/jenkins/run/tomcat/bin/startup.sh

 

 

2.直接运行 jenkins.war 包 (常用)

Ⅰ.下载 jenkins.war 包

// 从清华大学开源软件镜像源下载 jenkins.war 包
wget -P /usr/local/src/ https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/jenkins.war

 

 

Ⅱ.部署 java

// 使用 yum 部署java环境
yum search openjdk
yum -y install java-1.8.0-openjdk

 

 

Ⅲ.直接启动 jenkins.war 包

// 创建指定 uid 的 jenkins 目录
useradd -u 1212 jenkins

// 创建Jenkins相应目录
mkdir /usr/local/jenkins/{dockerfile,home,log,run,scripts} -pv

// 将 jenkins.war 移动到 jenkins 下的 run 目录
mv /usr/local/src/jenkins.war /usr/local/jenkins/run

// 修改jenkins目录的属主
chown -R jenkins /usr/local/jenkins/*

// 切换到 jenkins 用户, 并启动 jenkins.war
su - jenkins
cd /usr/local/jenkins/run
java -jar -Xmx1g -Xms1g /usr/local/jenkins/run/jenkins.war >/usr/local/jenkins/log/jenkins.log 2>&1 &

 

 

五,Jenkins初次访问及密码


1.初次访问 zxjr.jenkins.com

 

 

2.管理员密码

Ⅰ.方法一: 启动日志中查看

cat /usr/local/jenkins/log/jenkins.log
    ... ...
    29b9239ef5d4453688468640ec14fca5
    ...

 

Ⅱ.方法二: 根据web指定的目录查看

cat /usr/local/jenkins/home/secrets/initialAdminPassword 
    29b9239ef5d4453688468640ec14fca5

 

posted @ 2020-07-06 08:58  荣荣很乖  阅读(398)  评论(0编辑  收藏  举报