一 CI/CD
1 概念解析
- CI/CD的出现改变了开发人员和测试人员发布软件的方式
- 从最初的瀑布模型,到后来的敏捷开发(Agile Development)再到今天的DevOps,这是现代开发人员构建出色产品的技术路线
- 随着DevOps的兴起,出现了持续集成,持续交付和持续部署的新方法,传统的软件开发和交付方式在迅速变得过时过去的敏捷时代里,大多数公司的软件发布周期是每月、每季度甚至每年;而在现在DevOps 时代,每周、每天甚至每天多次都是常态
2 流程解析
持续集成(Continuous Integration)
- 其重点是将各个开发人员的工作集合到一个代码仓库中
- 通常,每天都要进行几次,主要目的是尽早发现集成错误
- 使团队更加紧密结合,更好地协作
持续交付(Continuous Delivery)
- 其目的是最小化部署或释放过程中固有的摩擦
- 它的实现通常能够将构建部署的每个步骤自动化
- 以便任何时刻能够安全地完成代码发布(理想情况下)
持续部署(Continuous Deployment)
- 是一种更高程度的自动化
- 目标是无论何时对代码进行重大更改,都会自动进行构建/部署
3 企业级项目作业流程
4 CI/CD工具
二 Jenkins
1 概念
- Jenkins是一个开源软件项目
- 起源于Hudson (Hudson是商用的)
- 是基于Java开发的
- 是一个可扩展的持续集成引擎
2 功能
- 用于监控持续重复的工作
- 旨在提供一个开放易用的软件平台
- 使软件项目可以进行持续集成
3 特点
- 部署简单,可以在Servlet中运行,也可以独立运行
- 用户界面友好,基于WEB页面实现所有操作
- 能够构建各种风格的项目
- 有大量插件可供选择
- 支持各种SCM(Soft Contro Management)工具,如Git、SVN
- 支持跨平台部署
- 构建历史自动管理,便于查阅
4 安装部署
官网部署:Jenkins download and deployment
[root@Jenkins]# yum -y install wget
[root@Jenkins]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@Jenkins]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
#Jenkins主机安装OpenJDK环境
[root@Jenkins]# yum install fontconfig java-11-openjdk
#声明JAVA_HOME环境变量
[root@Jenkins jvm]# ln -s /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.el8_4.x86_64/ /usr/lib/jvm/jdk
[root@Jenkins ~]# vim /etc/bashrc
[root@Jenkins ~]# tail -2 /etc/bashrc #声明JAVA_HOME环境变量
export JAVA_HOME="/usr/lib/jvm/jdk/"
export PATH=${JAVA_HOME}/bin/:$PATH
[root@Jenkins ~]# source /etc/bashrc #刷新当前bash环境
[root@Jenkins ~]# echo ${JAVA_HOME} #查看JAVA_HOME变量
/usr/lib/jvm/jdk/
[root@Jenkins ~]# which java
/usr/lib/jvm/jdk/bin/java
[root@Jenkins ~]# java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)
[root@Jenkins]# yum -y install jenkins
[root@Jenkins]# systemctl enable --now jenkins.service
[root@Jenkins]# ss -lntup | grep java
tcp LISTEN 0 50 *:8080 *:* users:(("java",pid=2247,fd=10))
#安装工具相关软件
[root@Jenkins ~]# yum -y install git postfix #Git用于拉取代码、postfix用于发邮件
#安装Jenkins
[root@Jenkins ~]# ls jenkins-2.361.4-1.1.noarch.rpm
jenkins-2.361.4-1.1.noarch.rpm
[root@Jenkins ~]# yum -y localinstall ./jenkins-2.361.4-1.1.noarch.rpm #安装Jenkins
#启动Jenkins服务
[root@Jenkins ~]# systemctl enable jenkins.service #设置Jenkins开机自启动
[root@Jenkins ~]# systemctl start jenkins.service #启动Jenkins服务器
[root@Jenkins ~]# ss -antpul | grep java #确认8080端口被监听
tcp LISTEN 0 50 *:8080 *:* users:(("java",pid=13602,fd=8))
[root@Jenkins ~]#
5 初始化
#获取Jenkins初始密码
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
1aaf609acf3843a8aaf17e8b1f22e8ea
[root@Jenkins ~]#
#浏览器访问: http://192.168.88.30:8080/
-
自定义管理用户
此处默认即可
-
更新密码
进入admin用户配置页面,下拉找到password部分,清理掉文本框中原有密码,更新admin用户密码
确认使用新密码即可登录Jenkins
系统管理 - - - - - 插件管理
三 Jenkins 工程构建
1 创建 Jenkins 工程任务
填写工程描述信息,方便其他人员了解工程任务内容,勾选参数化构建过程,选择Git参数
2 测试构建
3 查看构建
查看构建历史记录,显示绿色,构建成功
页面显示为本次构建详细信息,如果构建失败,可以通过详细信息快速排错
4 服务端查看
#确认代码拉取情况
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/ #Jenkins工作目录
HIS-FONTEND
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/ #确认HIS-FONTEND代码拉取
favicon.ico index.html static
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/* #清理Jenkins工作目录
[root@Jenkins ~]#
可以确认 Jenkins 已经从GitLab拉取到 HIS 项目前端代码
5 问题
但此时如果多次创建构建任务会导致本次构建覆盖上次构建下载的代码 ,同过修改配置规避不同版本的代码覆盖
添加额外行为,选择检出到子目录
配置子目录名称,选择调用上方的构建参数作为子目录后缀
选择参数化构建,v1版本。点击开始构建,测试代码是否创建子目录。
本地任务构建成功,查看控制台输出信息
#确认代码拉取情况
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/ #Jenkins工作目录
HIS-FONTEND
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/ #确认拉取到子目录
HIS-FONTEND-v1
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/HIS-FONTEND-v1/
favicon.ico index.html static
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/* #清理Jenkins工作目录
[root@Jenkins ~]#
6 将此次拉取下来的代码进行打包操作
由于最终要实现工作目录自动清理,所以此时删除检出到子目录的动作配置,便于后续操作
Jenkins 工程构建过程中可以调用shell命令,可以通过执行shell命令完成代码打包操作,定位到Build Steps ,选择增加构建步骤,执行Shell
添加要执行的shell 命令,jenkins 工程构建中工作目录 为/var/lib/jenkins/workspace/project/,所以可以使用相对路径
#填写到Jenkins中HIS-FONTEND工程的构建过程shell语句
rm -rf .git #删除拉取到Jenkins本地目录中的版本库
tar -zcf fontend.tar.gz #对代码进行打包操作
选择参数化构建,使用v1参数
查看构建历史列表,确认本次构建是否成功。进入控制台查看详细信息。
服务端查看
#确认HIS-FONTEND构建结果
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/
HIS-FONTEND
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/ #目录下有代码tar包
favicon.ico fontend.tar.gz index.html static
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/* #清理Jenkins工作目录
[root@Jenkins ~]#
四 HIS前端代码测试
1 Fontend主机部署Nginx
#HIS前端代码为编译后代码,可直接部署在nginx上查看效果
[root@Fontend ~]# yum clean all; yum repolist -v
Total packages: 8,265
[root@Fontend ~]# yum -y install nginx.x86_64 #安装nginx软件
[root@Fontend ~]# vim /etc/nginx/nginx.conf
[root@Fontend ~]# sed -rn '36,42p' /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
server {
#listen 80 default_server; #注释默认虚拟主机
#listen [::]:80 default_server; #注释默认虚拟主机
server_name _;
root /usr/share/nginx/html;
[root@Fontend ~]#
[root@Fontend ~]# cat /etc/nginx/conf.d/his.conf #编写HIS项目虚拟主机配置
server {
listen 80 default_server;
server_name __;
access_log "/opt/his/log/$host.log";
location / {
root "/opt/his/web/";
index index.html index.htm;
}
}
[root@Fontend ~]# mkdir -p /opt/his/{web,log} #创建HIS项目存放目录
[root@Fontend ~]# tree /opt/his/
/opt/his/
├── log #存放HIS访问日志
└── web #存放HIS前端代码
2 directories, 0 files
[root@Fontend ~]#
[root@Fontend ~]# systemctl enable nginx.service #设置nginx服务开机自启动
[root@Fontend ~]# systemctl start nginx.service #启动nginx服务
[root@Fontend ~]# ss -antpul | grep nginx
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=11255,fd=6),("nginx",pid=11254,fd=6),("nginx",pid=11253,fd=6))
[root@Fontend ~]#
#测试Nginx服务中HIS页面
[root@Fontend ~]# echo "test" > /opt/his/web/index.html #创建测试页面
[root@Fontend ~]# curl http://localhost/ #访问测试
test
[root@Fontend ~]# rm -rf /opt/his/web/index.html #删除测试页面
[root@Fontend ~]#
2 Jenkins代码自动发布
点击系统管理----插件管理----已安装,确认Publish Over SSH 插件已安装
进入系统配置页面添加SSH服务器
进入系统配置页面,到最低端定位SSH Server,选择添加SSH服务器
点击右侧测试连接,左侧显示Success则表示配置联通,最后点击保存
点击工程列表中的HIS-FONTEND任务进入任务管理页面
点击配置修改工程构建配置,实现HIS前端代码自动发布
选择构建后操作步骤,下拉菜单中选择“Send build artifacts over SSH”调用SSH插件
选择参数化构建,v1参数,点击开始构建
#Jenkins主机确认HIS前端代码拉取及打包情况
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/
favicon.ico fontend.tar.gz index.html static
[root@Jenkins ~]#
#Fontend主机确认代码包推送情况
[root@Fontend ~]# ls /opt/his/web/
fontend.tar.gz
[root@Fontend ~]#
#解包HIS前端代码,访问测试
[root@Fontend ~]# cd /opt/his/web/
[root@Fontend web]# tar -xf fontend.tar.gz
[root@Fontend web]# ls
favicon.ico fontend.tar.gz index.html static
[root@Fontend web]#
#访问Fontend主机测试前端页面展示效果 http://192.168.88.70/
3 浏览器 Web 页面查看