一, 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 " export 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