CI/CD
- CI
- (continuous integration-CI)
- 持续集成
- 代码合并,构建,部署,测试都在一起,不断的执行的过程,并对结构反馈。
- 持续集成
- (continuous integration-CI)
- CD
- (continuous Deloyments)
- 持续交付
- 把代码部署到测试环境,预生产环境。
- 持续交付
- (continuous Deloyments)
- CD
- (continous Delivery)
- 持续部署
- 将最终的产品发布到生产环境,给用户使用。
- 持续部署
- (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。
- CI
- 英文全称:Continuous Integration 中文全称:持续集成工具 持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。
- SCM
- 英文全称:Source Control Management (Software Version Control) 中文全称:源码控制管理软件 版本控制
- CI
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实战案例
-
Jenkins实战案例
-
环境
-
centos7
-
github,gitee,gitlab
-
192.168.229.11 部署jenkins(4\6\8G)
-
192.168.229.21充当tomcat网站服务器
-
-
1、安装相关工具
-
安装相关工具
-
JDK
- Jenkins是Java编写的,所以需要先安装JDK,采用yum安装,也可自己编译安装。如果对版本有需求,可以直接在Oracle官网下载JDK;本次课程使用的是后续的编译安装
-
mave安装
-
官网https://maven.apache.org/
-
下载 maven3.8.8 包
- https://dlcdn.apache.org/mave选择自己需要的maven版本
- wget https://dlcdn.apache.org/maven/maven-3/3.8.8/source/apache-maven-3.8.8-src.tar.gz
- tar -zxvf apache-maven-3.8.8-src.tar.gz -C /usr/local/
- mv /usr/local/apache-maven-3.8.8/ /usr/local/maven
-
配置环境变量
-
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
-
-
-
生效
- source /etc/profile.d/jenkins_tools.sh
-
测试
-
mvn -version
-
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: /usr/local/maven Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
-
-
-
-
部署git
-
1.安装依赖包
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker fontconfig -y
-
2.git官网下载最新版本GIT
- wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
-
3.安装git:
-
解压并cd到解压目录
- # tar xf git-2.9.5.tar.gz
- # cd git-2.9.5/
- # make prefix=/usr/local/git all
- 编译源码包
- # make prefix=/usr/local/git install
- 源码安装
-
修改环境变量
- # vim /etc/bashrc
- PATH=$PATH:$HOME/bin:/usr/local/git/bin
- 关于bashrc和profile
- /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次!!!登录!!!时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置.
- /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
- 关于bashrc和profile
- PATH=$PATH:$HOME/bin:/usr/local/git/bin
- # source /etc/bashrc
- # vim /etc/bashrc
-
测试是否安装成功:
-
# git --version git version 1.8.3.1
-
如果你查询的是低版本,有可能是系统YUM安装的.yum卸载之后即可.
# yum remove git.x86_64 # source /etc/bashrc # git --version git version 2.9.5
-
-
-
-
-
2、安装Jenkins
-
安装Jenkins
- 1、下载上传 jdk22 tomcat9
- 1、下载上传 jdk22 tomcat9
- 2、解压jdk
- [root@jenkins ~]# tar xf jdk-11.0.16_linux-x64_bin.tar.gz
- 3、解压tomcat
- [root@jenkins ~]# tar xf apache-tomcat-9.0.79.tar.gz
- 4、拷贝并修改名称
- [root@jenkins ~]# mv jdk-11.0.16 /usr/local/java && mv apache-tomcat-9.0.79 /usr/local/tomcat
- 5、处理环境变量
- [root@jenkins ~]# vim /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
```
- [root@jenkins ~]# source /etc/profile.d/java.sh
- ```powershell
# 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)
[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"
```
- 6、上传jenkins
- 官网下载jenkins:
- http://updates.jenkins-ci.org/download/war/
-
-
- 下载2.422
- 上传至服务器
- [root@jenkins ~]# rm -rf /usr/local/tomcat/webapps/*
- [root@jenkins ~]# cp jenkins.war /usr/local/tomcat/webapps/
- 我这里用的是2.422
-
-
7、启动tomcat,并页面访问
-
[root@jenkins ~]# /usr/local/tomcat/bin/startup.sh
-
访问 ip:8080/jenkins
-
http://192.168.229.11:8080/jenkins
-
-
错误1
- 缺少字体
- yum install fontconfig 安装并重启tomcat
- 如果还有其他错误,请查询tomcat的错误日志.
3、前台配置jenkins
-
前台配置jenkins
- 0.加载中
- 0.加载中
-
- 1.解锁Jenkins
-
为了安全考虑,首先需要解锁Jenkins
-
-
2.添入以下文件密码到上图页面中
-
cat /root/.jenkins/secrets/initialAdminPassword
- 07af1055d4644cb7884c855043b82e3d
-
-
-
点击继续
-
3.选择suggested的插件进行下载
-
4.等待安装完成
-
-
因为网速原因,插件可能下载失败,没关系,把他们记录下来,比如下图的两个插件,点击继续,进去之后手动重新安装未安装好的插件
-
也可以重试,继续下载安装。
-
如果大量组件,重试多次依然未安装成功.请尝试如下方法
-
jenkins 插件安装缓慢问题
-
vim ~/.jenkins/hudson.model.UpdateCenter.xml <url>http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url> 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.229.11:8080/jenkins/restart 重启tomcat
-
-
-
5.创建用户
-
用户名:lixinyi
-
密码: lixinyi@2401
-
6.jenkins的分享地址
-
http://192.168.229.11:8080/jenkins/
-
7.前台安装完成
-
如果这个页面过一会消失了。并且常时间空白。可能需要你登录了。换个浏览器,打开相同的地址就会出现认证页面。
-
欢迎界面
4、系统配置
-
系统配置
-
系统消息:Welcome to Jenkins~
-
Manage Jenkins
-
提示信息
- 初始页面提示
- 初始页面提示
-
-
-
-
-
- centos7支持截止日期
- 操作系统寿命终止监视器 您正在CentOS Linux 7(Core)上运行Jenkins。Jenkins将在2023-11-16年后不再支持CentOS Linux 7(Core)。 请计划在2023-11-16年之前升级到受支持的操作系统。 有关详细信息,请参阅文档。
- 如果你希望继续使用centos7上jenkins请保留这个版本
- 单节点提示
- centos7支持截止日期
-
- 在内置节点上构建可能是一个安全问题。您应该设置分布式构建。请参阅文档。
-
-
全局变量设置
-
全局工具配置
maven配置 -
/usr/local/maven/conf/settings.xml
-
添加JDK工具
-
点击新增—> 取消自动安装 ---->然后查询Jenkins服务器上JDK的路径,填写JAVA_HOME —> 保存即可
保存 -
添加git工具
- /usr/local/git/bin/git
添加maven工具
- /usr/local/git/bin/git
-
/usr/local/maven
-
- 点击保存
-
SSH 设置
-
目的
-
简介
- (192.168.229.11)jinkens服务器上的maven将开发产生的*.war包。 通过SSH自动推送到远程tomcat 服务器上(192.168.229.21)。 需要手工配置ssh key。配合自动化推送
-
192.168.229.11是jenkins
-
192.168.229.21是tomcat网站服务器,代表业务服务器
-
图示
-
1.jenkins服务器准备秘钥认证
- # ssh-keygen
- 一路回车
- # ssh-copy-id -i 192.168.229.21
- 注意这里的192.168.229.21是一台tomcat网站服务器。什么都不用安装,接到代码即可。
- #ssh 192.168.229.21 登录不需要密码即可
- # ssh-keygen
-
-
# exit
-
-
2.在jenkins上配置ssh信息
-
准备SSH私钥
-
[root@localhost ~]# ip a | grep inet inet 192.168.229.11/24 brd 192.168.0.255 scope global dynamic ens32 [root@localhost ~]# cat ~/.ssh/id_rsa -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA9ttRxXiVoxkgTvp+qZUmBsz4iAzBPeLwVDZlP8h2zSh95tS7 2Tc3PLeb16He8MH1Xl1NCl8q76PdqGKm+YWnhDZ5RMAd7N+kE5lbhg+LG/LhsMGm vqhkcPwcKiGihb/yMBtNdB6Rdch3+DAsgIQ7Mq/CnlSBxEss+6QEzRybVl6k1I4G h2V9OebWJqfueWg1yZrw35ZFlfQ9e5g8yHLgEbM8v/AVYEj+8hHdMYsKHTdm4Re/ WFFz+ngiqx2NjDvDygVyY0bgs7oWAwfO4X77aC6onUBnLMxfUpRwq4U3XFhBClOL yqV5q6wiT/StCGvS087GTluGlZ8bylXLKNYUIwIDAQABAoIBAGfGlZ69bbKuGm35 Uow6Hk1Xl9eh/Q7mO4A7id8BiCgBMMR8hCfx1W/aBFLnQtDVyTANaxjEH0m1CrcC Gg3lySGEwQBM/4eYEOMIYnh+Sk3KkmR7VHzsT6VL5w8zKp6trcPZhnsdaqsoRn74 yYyRik1ppBhpkFAUBmoXbslHkGoC9kfNs783SJhw6UeVgJ5eLIkDzTYBLgV7EtXI 5DpYkLg4Skzw1Q1VK70yXN4Wh25PdhWEb0hHTjbHaMq4OdjRzYsIGCTFX/o57HV/ KG1uW4ubbrMj87yi6wcTlPpArViJHk5YzKGVqbgIJfRjbdYEvJ2AeI+UhtAehsqk 235qyjECgYEA/vdRH7FfVg7nuXduBIpA6XTDQ9DkSwZaGqCTyPAvuwPoM+0U7gKh O0XJQAk8010sPbc77NRolOTzWZGIsQTR/iUi5PhuD6PCL6/ozmPHJab5WqkCj/Fw 89mxOAyx9m7wZuzNawtagNsY5baLRtEv+3yV68GA46XSblnxs9GdQskCgYEA99uV iBjVDBpzyuI2cjDzena3rDkSX0wRZ0z5rIEbSDT8bzfBUCyVPFfKtWeufcTzYRdm dW6d1cg5JP7GOUxnYXOV8t38oTtJtUmjPo4jiYGMxnRxz65wouEu2z0f4MXyuGZv qRCFAY1LRXowAFqvqIavIRMvhfMMa6RMbs1ryYsCgYBPoAcqwacHZkJB7qViL5cU EY4FuNADCinLlQhyQWh2nELBLLJTnmih7SproDbpv3hYkcfaL3+1uEazWzr4JYw7 NXfPUDJ3GepEIEixZAHGpX3MLWoKcBmZXgv1eCl/z6euTRfd7T7HbSU6YCbg5+V3 QbJEXTsWXSv5oIdWZAkb2QKBgEx7fs3rU7qTYw3E9iYQguFURuMnDUtIzsoAj76y bDfA2fB71PQnfbmMIaoOn2KB5tQcA2rTQnMYgMGwuHwv3mrM3wV9iJo8EEeXvH7u H3sr9cO7ZO9AFdO9BtdyKicTDg3m1ifmSBStg/+hb7R8R14KiXn8UJrV4AxLO6ap Tsx3AoGBAMv0D3KtubEZaaG+Bmuydot1lnchLuVmx0H81ZKA0daxlGFZ7kvZ5GR+ qa9xYpEIJ4yr+d9QjUhMPQb+hPytOjMJ09lfAnqsuH5mNAUvAwMzgfT2D1gneYnQ 0qFz59Ru9f7G1AM5VTjYORr0SauppWgeowWxB5MPGhWiOtGpVvyO -----END RSA PRIVATE KEY----- [root@localhost ~]#
-
复制cat出来的所有内容,粘贴到下一步页面上的key中。
-
进入jenkins系统设置
-
-
-
-
- 粘贴到jenkins
5、插件管理
-
插件管理
-
介绍
- 这里有可更新、可选未安装插件、已安装插件;可以通过过滤快速查找
安装插件
- 这里有可更新、可选未安装插件、已安装插件;可以通过过滤快速查找
-
-
(1)Maven Integration plugin 安装此插件才能构建maven项目
-
2)Deploy to container Plugin 安装此插件,才能将打好的包部署到tomcat上
-
- 安装git相关3个插件
-
安装过程同第一个插件:
- GIT plugin
- GitHub Authentication
- GitHub Authentication
-
-
-
-
-
-
GitHub Branch Source
- 默认已安装
-
GitHub Organization Folder
- 淘汰了。不用安装这个插件了
-
-
-
-
(4)安装插件:Publish Over SSH
- 安装过程同第一个插件:
-
-
- GIT plugin
-
优化maven
-
配置国内maven镜像
-
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>
-
-
6、Jenkins+Maven+Github+Tomcat 自动化构建打包、部署
-
Jenkins+Maven+Github+Tomcat 自动化构建打包、部署
- 创建一个Maven工程
- 创建一个Maven工程
-
1.构建maven项目
2.源码管理 -
选择版本控制器和仓库地址
-
互联网仓库1
- https://github.com/bingyue/easy-springmvc-maven.git
-
互联网仓库2
- https://gitee.com/newrain001/easy-springmvc-maven.git
-
如果有图中的提示,请注意你的git工具在jenkins中是否配置正确
-
-
-
-
注意
- 如果是私有仓库,这里需要建立credentials身份认证
-
-
-
3.设置触发器(保持默认)
4.设置构建(编译打包) -
手动添加Goals and options
- clean package -Dmaven.test.skip=true
5.构建后操作
- clean package -Dmaven.test.skip=true
-
在构建后设置中 选择:(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.229.21(tomcat)上创建该目录。 用来存放网站源代码。(需要后台创建) # mkdir -p /jenkins/war
-
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
- 重试
-
7、构建任务
-
构建任务
-
1.立即构建
-
2.查看构建结果
- 结果路径
- 结果路径
-
-
-
3.观察tomcat(192.168.229.21)网站服务器,代码和脚本
-
[root@localhost ~]# ls /jenkins/ easy-springmvc-maven.war sh war [root@localhost ~]# ls /tmp/aaaaaa.txt /tmp/aaaaaa.txt
-
easy-springmvc-maven.war 就是推送过来的网站源码了
-
-
8、检查错误配置
-
检查错误配置
-
左侧:点击“系统管理”
-
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(略)
- http://192.168.43.114:8080/jenkins/restart
- http://192.168.43.114:8080/jenkins/exit
- http://192.168.43.114:8080/jenkins/reload
-
排错问题示例
-
问题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
-
问题3:插件下载后继续下面初始化完成点开始的时候跳到一个空白页面
-
问题4:脚本权限
- 尝试修改构建后脚本的权限
-
问题5:构建个人的github库时,缺失pom文件
- 可以用公共库中拷贝,传到自己的GitHub上。
-
-