CI/CD
CI (continuous integration-CI) -- 持续集成
-
代码合并,构建,部署,测试都在一起,不断的执行的过程,并对结构反馈。
-
CD(continuous Deloyments)-- 持续交付
-
把代码部署到测试环境,预生产环境。
-
-
CD(continous Delivery)-- 持续部署
-
将最终的产品发布到生产环境,给用户使用。
-
-
实现持续集成/持续发布的产品
-
开发(git) -->git远程仓库-->jenkins(git+jdk+tomcat+maven打包+测试)-->发布到tomcat服务器
-
-
jenkins
-
Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。 意思是我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL,将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到web容器中。
-
Jenkins
Jenkins概述
是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。 jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。
Jenkins目标
是监控软件开发流程 快速显示问题 提高开发效率 过程控制
Jenkins特性
-
易于安装
-
不需要安装、不需要数据库,只需通过java -jar jenkins.war或部署到一个servlet容器中
-
-
易于配置
-
所有的配置都可能通过jenkins提供的web界面完成,当然如果你喜欢,也可以通过手动修改xml文件进行配置
-
-
测试报告
-
生成JUnit或TestNG的测试报告.集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。
-
-
文件识别
-
jenkins能跟踪每次构建生成哪些jar包以及使用哪个版本的jar包
-
-
分布式构建
-
支持Jenkins能够让多台计算机一起构建/测试。
-
-
插件支持
-
jenkins可以通过第三方插件扩展,也可以根据团队需要开发插件
-
-
任务(Job)和构建(build)
-
任务:(Job)是Jenkins的一个执行计划,是一系列操作的集合。 构建:是Jenkins的任务的一次运行。
-
-
工作流程图
-
开发者检入代码到源代码仓库。
-
CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
-
CI系统会在对应的工作区内执行构建过程。
-
(配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
-
(配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。
-
CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。 Jenkins就是这么一个CI系统。之前叫做Hudson。
Jenkins实战案例
环境
-
centos7
-
github,gitee,gitlab
-
192.168.183.101 部署jenkins(4\6\8G)
-
192.168.183.100充当tomcat网站服务器
-
关闭防火墙\关闭selinux\配置了yum源(base,epel 阿里源)
1、安装相关工具
1,mave安装
要在java环境下才能用,下面有安装jdk
-
2,下载 maven3.8.8 包
-
https://dlcdn.apache.org/mave选择自己需要的maven版本
-
[root@yt ~]# wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
也可以下载好直接上传到linux中
- 3,解压后不用安装,直接放到/usr/local/下
[root@yt ~]# tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /usr/local/
[root@yt ~]# mv /usr/local/apache-maven-3.8.8/ /usr/local/maven
- 4,配置环境变量
[root@yt ~]# vim /etc/profile.d/jenkins_tools.sh
export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
PATH=$M2:$PATH:$HOME/bin:/usr/local/git/bin
export MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:$PATH
- 5,刷新环境变量
[root@test8 ~]# source /etc/profile.d/jenkins_tools.sh
2,部署git
- 1.安装依赖包
[root@test8 ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker fontconfig -y
- 2.git官网下载最新版本GIT
[root@test8 ~]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
也可以下载好上传到linux中
- 3.安装git
源码安装
[root@test8 ~]# tar xf git-2.9.5.tar.gz
[root@test8 ~]# cd git-2.9.5/
编译源码包,安装在/usr/local/git目录下
[root@test8 git-2.9.5]# make prefix=/usr/local/git all
时间会有些久!!
安装包
[root@test8 git-2.9.5]# make prefix=/usr/local/git install
- 4,修改环境变量 -- 更新git的路径,从用户主目录下的
bin
目录 修改到 /usr/local下面
编辑/etc/bashrc文件
[root@test8 git-2.9.5]# vi /etc/bashrc
最下面添加:
PATH=$PATH:$HOME/bin:/usr/local/git/bin
-
关于bashrc和profile
-
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次!!!登录!!!时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置.
-
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
-
- 5,刷新环境变量
[root@test8 git-2.9.5]# source /etc/bashrc
- 6,测试是否安装成功:
[root@test8 git-2.9.5]# git --version
git version 1.8.3.1
- 7,如果你查询的是低版本,有可能是系统YUM安装的.yum卸载之后即可.
[root@test8 git-2.9.5]# yum remove git.x86_64 [root@test8 git-2.9.5]# source /etc/bashrc [root@test8 git-2.9.5]# git --version git version 2.9.5
3、安装Jenkins
搭建jdk环境和Tomcat服务
1、上传 jdk-11.0.16_linux-x64_bin.tar.gz apache-tomcat-9.0.79.tar.gz
2、解压jdk
-
[root@test8 ~]# tar xf jdk-11.0.16_linux-x64_bin.tar.gz
3、解压tomcat
-
[root@test8 ~]# tar xf apache-tomcat-9.0.79.tar.gz
4、拷贝并修改名称
-
将解压后的jdk和Tomcat移动到/usr/local/下 [root@test8 ~]# mv jdk-11.0.16 /usr/local/java && mv apache-tomcat-9.0.79 /usr/local/tomcat
5、处理环境变量
-
[root@test8 ~]# vi /etc/profile.d/java.sh 编辑一下内容: TOMCAT_HOME=/usr/local/tomcat JAVA_HOME=/usr/local/java PATH=$TOMCAT_HOME/bin:$JAVA_HOME/bin:$PATH export TOMCAT_HOME JAVA_HOME PATH
6、刷新环境变量
-
[root@test8 ~]# source /etc/profile.d/java.sh [root@test8 ~]# java -version java version "11.0.16" 2022-07-19 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.16+11-LTS-199) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.16+11-LTS-199, mixed mode) 这里验证maven也是安装好的 [root@web ~]# mvn --version Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: /usr/local/maven Java version: 11.0.16, vendor: Oracle Corporation, runtime: /usr/local/java Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
4、安装jenkins
-
1,官网下载jenkins: jenkins.war
下载2.422
-
2,上传至服务器
-
3,清空Tomcat下webapp中的所有文件,防止Tomcat中的文件造成干扰
[root@test8 ~]# rm -rf /usr/local/tomcat/webapps/*
-
4,将Jenkins.war包放到Tomcat/webapp下
[root@test8 ~]# cp jenkins.war /usr/local/tomcat/webapps/
-
5、启动tomcat,并页面访问
[root@test8 ~]# /usr/local/tomcat/bin/startup.sh
- 可能出现的错误
-
缺少字体
[root@yt ~]# yum install fontconfig 安装并重启tomcat [root@yt ~]# /usr/local/tomcat/bin/startup.sh
-
如果还有其他错误,请查询tomcat的错误日志.
-
2、前台配置jenkins
-
1,解锁Jenkins
- 2,添入以下文件密码到上图页面中
[root@yt ~]# cat /root/.jenkins/secrets/initialAdminPassword 44bae7336de74fafaa8fa78bdb0311c6
点击继续
- 3,选择suggested的插件进行下载
- 4,等待安装完成。
因为网速原因,插件可能下载失败,没关系,把他们记录下来,比如下图的两个插件,点击继续,进去之后手动重新安装未安装好的插件,也可以重试,继续下载安装。如果大量组件,重试多次依然未安装成功.请尝试如下方法解决jenkins 插件安装缓慢问题
-
[root@yt ~]# vim ~/.jenkins/hudson.model.UpdateCenter.xml <url>http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url> [root@yt ~]# vim ~/.jenkins/updates/default.json 替换命令 % s/www.google.com/www.baidu.com/g % s/updates.jenkins.io\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g 旧版: http://updates.jenkins-ci.org/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 新版:https://updates.jenkins.io/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 修改完以后,重启Jenkins服务再输入密码,继续安装,速度贼快。 http://192.168.183.100:8080/jenkins/restart 重启tomcat
- 5,创建用户
6,jenkins的分享地址 http://192.168.183.100:8080/jenkins/
- 7,前台安装完成
如果这个页面过一会消失了。并且常时间空白。可能需要你登录了。换个浏览器,打开相同的地址就会出现认证页面。
- 8,登录成功进入欢迎界面
3、系统配置
-
系统配置
-
系统消息:Welcome to Jenkins~
-
Manage Jenkins
-
提示信息
-
初始页面提示
-
centos7支持截止日期
-
操作系统寿命终止监视器 您正在CentOS Linux 7(Core)上运行Jenkins。Jenkins将在2023-11-16年后不再支持CentOS Linux 7(Core)。 请计划在2023-11-16年之前升级到受支持的操作系统。 有关详细信息,请参阅文档。
-
如果你希望继续使用centos7上jenkins请保留这个版本
-
-
单节点提示
-
-
-
在内置节点上构建可能是一个安全问题。您应该设置分布式构建。请参阅文档。
-
-
全局变量设置
- 全局工具配置
- maven配置
/usr/local/maven/conf/settings.xml
- 添加JDK工具
点击新增---> 取消自动安装 ---->然后查询Jenkins服务器上JDK的路径,填写JAVA_HOME ---> 保存即可
- 添加git工具
/usr/local/git/bin/git
- 添加maven工具
/usr/local/maven
SSH 设置:
注意这一步等插件管理进行完之后再进行下面的操作
-
简介
-
(192.168.183.100)jinkens服务器上的maven将开发产生的*.war包。 通过SSH自动推送到远程tomcat 服务器上(192.168.183.101)。 需要手工配置ssh key。配合自动化推送
-
-
192.168.183.100是jenkins
-
192.168.183.101是tomcat网站服务器,代表业务服务器
1.jenkins服务器准备秘钥认证
[root@yt ~]# ssh-keygen
一路回车
2.将秘钥拷贝给目标服务器
[root@yt ~]# ssh-copy-id -i 192.168.183.101
3.注意这里的192.168.183.101是一台tomcat网站服务器。什么都不用安装,接到代码即可。
4.测试连接
[root@yt ~]# ssh 192.168.183.101
登录不需要密码即可
切记测试远程登录后退出!!!
[root@yt ~]# exit
5.在jenkins上配置ssh信息
- 1.查看SSH私钥
[root@yt ~]# cat ~/.ssh/id_rsa -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA3sx3DSfnhnGTenwXSDvd37jUAAjz0q+g9xJWL+9noRusyNz2 3R413uLDh8JCCLeYJg9yIRp/8pGKBP2oU5XUtlRVUXGmOkywVr0bOzTHdXlyr/Wm vPegep+bsiaMUtJkRY3fV+sXYAwkKu9rEKiuOoCRyiuNG3qAywj3Nm48A8vvQSe0 nf4ZhCAG0YB8Q1IIyLm+/0/Z0cQChNKQjdCfQJB37Wx2Oi0Y3ajta7Tt3iEWl6bF 0VZbBOr4BYpZAVeTUrMpTxw7HQAP7HOynG/RkVD9z9AyQgZQo2UginQpEYYJ+VwQ 2fDrUUQwvFg2Zy2jBZvRdQjjvqhM1c8fSGwYHwIDAQABAoIBAGtzYstGfoO5jO3a oQPmU4hNRHlL2AO5TkE6Z7SwmmL5zOgGoUxdAJAg/zofNuerW8anVlyewixDgrQL fb3qGe9hVtBzpj6hs73xcAuq1bNTQjuYlrS2HIBnL5jIvI5JB7D/zkJBkEFzOZI3 a4RaRcTTMvy06lXhS/IfvdJTccBGGPRpdXulzULlfBJIJoodmVzFvNT1TBhUtaE5 AVoxXwccUizzRX5ACq0URpUTGEFqREl5w7R6jtXHnSiat3UIq5ChS7sa6D24pMmi HVe4CHhcjW+9Yfs8bgbZ/rSdPz1cQ33BGyZt9VRxyTPCF90gqh/EDOFBDEiDR+bp ovvZfFkCgYEA9/PeeqzlwPqq5/6B7RDZ4rbm+X2RQpzb49al4/mXOoq/Lv1UWyRU Qn1DTEvoxh7Rgp427r8O9a+wlB20TS7vkybJxIb7tOtosiWvXD1Xjxhzv+hEAaV0 m2ezgznVF5v7Aw+AQQGzJCk9M75dTT1W63LId4/NPPRGL4dAxQ6CvoMCgYEA5gea WfuAKFK/ZJACi7ZT3geoXap72b8wyeM2elpCLfZFMbLC52Pp2uD+IQUnIDgBRELu WjdQzgxafz9miDtXi7kWLDhKnUWppprJoGTVkSvnIgYTdA0G6cvliSRuV8xTKHYc wygVxL1MtAknrfylwwfixoHDlKKWAzVzkX46DTUCgYEA6YfBie8f8ZLltt0pR7tw S6ySfHb8gi20mLFIyx//hD67dCla8wCTb5AE+24fTcIm94vGFzTRhSq097vGXk+P ixukOzobBboWgHsn34tS1U5lbmD29En+OoQAOd8VSUg6sRY/aHqOW8ePghWQULgu DlGsZ5eD6R30oL0VjsNs9rsCgYBCd6XxJEwG2so1C6vApSGcwYez8QQyih1V6NKg Dh6bW1LpJmdNJ0C2n1avQebpV2V+TPzEksFFmKo5pJ9C9Cq60/OFOYrN4QhBfO6P 6zMO7Kmv2iOa3/zEZ8delmlP81mAEokDFz0bCTv1tcOCccOQFGJBy9Mwyr4gFTzc qKWrlQKBgBXLMBs+h5Ax8KIrjxlHIt8oPUYCOpi4ofdUBXUafzbEiYZPK3Y2UbDP 4OTI5sflEBsfRkzl1Nw+V6n89utUQyv8LgHJNvwo4A3DMn+s2FsCx/tIZrKtejo6 ZKTpqjm3bsBhThQCQnqKpqNhUgWL+AqN5Ug8KLGTB7TTSsGeJo1+ -----END RSA PRIVATE KEY-----
-
复制cat出来的所有内容,粘贴到下一步页面上的key中。
- 进入jenkins系统设置
- 粘贴到jenkins
4、插件管理
-
插件管理
这里有可更新、可选未安装插件、已安装插件;可以通过过滤快速查找
-
安装插件
-
(1)Maven Integration plugin 安装此插件才能构建maven项目
-
(2)Deploy to container Plugin 安装此插件,才能将打好的包部署到tomcat上
-
(3) 安装git相关3个插件
-
安装过程同第一个插件:
-
GIT plugin
-
GitHub Authentication
-
GitHub Branch Source
-
默认已安装
-
-
GitHub Organization Folder
-
淘汰了。不用安装这个插件了
-
-
-
-
-
(4)安装插件:Publish Over SSH
-
安装过程同第一个插件:
回到上面配置ssh
-
-
优化maven
-
配置国内maven镜像
[root@yt ~]# vim /usr/local/maven/conf/settings.xml 注意每一行 <mirror> <id>central</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
5、Jenkins+Maven+Github+Tomcat 自动化构建打包、部署
-
Jenkins+Maven+Github+Tomcat 自动化构建打包、部署
-
创建一个Maven工程
-
1.构建maven项目
-
2.源码管理 -- 选择版本控制器和仓库地址
-
互联网仓库1
https://gitee.com/newrain001/easy-springmvc-maven.git https://gitee.com/chenfuguo1949/easy-springmvc-maven.git
-
互联网仓库2
https://github.com/bingyue/easy-springmvc-maven.git
-
-
-
如果有图中的提示,请注意你的git工具在jenkins中是否配置正确
注意:如果是私有仓库,这里需要建立credentials身份认证
-
3.设置触发器(保持默认)
-
4.设置构建(编译打包)
-
手动添加Goals and options
clean package -Dmaven.test.skip=true
-
-
5.构建后操作
-
在构建后设置中 选择:(send build artifacts over ssh)通过SSH发送构建工件
点击 --> 增加构建后操作
-
说明
-
name
-
ssh server 因为之前的配置会默认出现tomcat业务服务器的名字
-
-
source file
-
target/*.war
-
构建之后,在jenkins服务器上是可以自动看到war包的。(该路径不需要创建) # ls /root/.jenkins/jobs/testjob1/builds/target/*.war
-
-
Remove prefix
-
自动删除路径前缀(不需要创建路径前缀)
-
-
Remote directory
-
tomcat业务服务器上的路径,需要提前在192.168.183.101(tomcat)上创建该目录。 用来存放网站源代码。(需要后台创建) # mkdir -p /jenkins/war,真正的部署项目应该放到/usr/local/tomcat/webapp/下
-
-
Exec command
tomcat(192.168.229.21)在接收到源码之后的自定义动作。 比如:将源码拷贝到网站的主目录(/jenkins),并执行一些其他操作如重启服务器等(或创建文件touch)(需要后台创建) # mkdir /jenkins/sh # cat /jenkins/sh/deploy.sh cp -r /jenkins/war/*.war /jenkins touch /tmp/aaaaaa.txt #chmod +x /jenkins/sh/deploy.sh
-
-
6.保存
-
-
-
执行构建
-
错误1
-
github连接失败
ERROR: Error cloning remote repo 'origin' SSH: Current build result is [FAILURE], not going to run. Finished: FAILURE 重试
-
6、构建任务
-
构建任务
-
1.立即构建
-
2.查看构建结果
-
结果路径
-
输出信息,最后是如下:
-
-
channel stopped
SSH: Connecting from host [web.chenfuguo.cn]
SSH: Connecting with configuration [tomcat] ...
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [tomcat] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS
7、检查错误配置
-
检查错误配置
-
左侧:点击“系统管理”
-
1.如果有“编码问题”错误,在Tomcat–>conf–>server.xml文件中修改即可
[root@localhost ~]# head -1 /usr/local/tomcat/conf/server.xml <?xml version="1.0" encoding="UTF-8"?>
-
2.如果有”反向代理设置有误“错误,请忽略
-
关于jenkins 设置中文语言(略)
-
关于重启jenkins(略)
-
排错问题示例
-
问题1:jenkins访问一直处于等待状态tomcat日志显示如下信息:
[root@jenkins logs]# tail -f /usr/local/tomcat/logs/catalina.out WARNING [Handling GET /jenkins/login from 10.0.0.174 : http-nio-8080-exec-3 HudsonIsLoading/index.jelly] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/WEB-INF/classes/lib/layout/breadcrumbs.jelly] to the cache for web application [/jenkins] because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
-
解决方案
只要在$CATALINA_BASE/conf/context.xml里增加资源最大可缓存的大小就行了,大小可按自己的需要定义 # vim /usr/local/tomcat/conf/context.xml <Context> <!-- Default set of monitored resources. If one of these changes, the --> <!-- web application will be reloaded. --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <Resources cachingAllowed="true" cacheMaxSize="100000" /> </Context> 最后重起tomcat,问题解决!
-
-
问题2:剩余内存必须大于2G
-
tomcat启动之前的内存
-
tomcat启动之后的内存
-
-
问题3:插件下载后继续下面初始化完成点开始的时候跳到一个空白页面
-
解决:点击地址栏左边的后退按钮即可进入正常页面
-
接着上面的错误,返回之后虽然进入正常界面,但是会有如下提示:
-
手动安装这些插件
-
-
-
问题4:脚本权限
-
尝试修改构建后脚本的权限
-
-
问题5:构建个人的github库时,缺失pom文件
-
可以用公共库中拷贝,传到自己的GitHub上。
-
-
8、构建部署前端项目
1,安装nginx
[root@yt ~]# yum install nginx -y
[root@yt ~]# systemctl start nginx
2,测试nginx安装成功
出现nginx服务器的主页
[root@yt ~]# systemctl restart nginx.service
2,安装node.js
服务器上的node版本要和开发环境用的node版本同步,问前端要他的node.js的版本
查看node版本
node -v
1,下载node.js
node.js官网https://nodejs.org/zh-cn
1.把压缩包传到服务器,解压就是安装
2.解压安装
[root@yt ~]# tar -xvf node-v17.9.1-linux-x64.tar.xz -C /usr/local/
3.修改node的名字方便配置环境变量
[root@yt ~]# mv /usr/local/node-v17.9.1-linux-x64/ /usr/local/node
4.配置环境变量
[root@yt ~]# vim /etc/profile.d/node_tools.sh
export NODE_HOME=/usr/local/node/
export PATH=$NODE_HOME/bin:$PATH
5.刷新环境变量,测试node和npm是否安装成功
[root@yt ~]# source /etc/profile.d/node_tools.sh
[root@yt ~]# node -v
v17.9.1
[root@yt ~]# npm -v
8.11.0l
3、构建Jenkins任务
https://github.com/cfg1573/my-vue-2402.git
配置目标机器
[root@yt ~]# mkdir /root/web
[root@yt ~]# vim web.sh
# jenkins 拉取代码存放地址
cd /root/web # 为什么要切换目录:因为npm install执行安装依赖要在项目目录下才能找到需要的依赖是什么才可以执行。
npm install
npm run build # 将vue项目进行打包成浏览器可以识别的html、css、js文件
rm -rf /usr/share/nginx/html/*
cp -r /root/web/dist/* /usr/share/nginx/html/
systemctl restart nginx.service
[root@yt ~]# chmod +x /root/web.sh