CI/CD:
(持续集成/持续发布) :开发(git) -->git主库-->jenkins(git+jdk+tomcat+maven打包+测试)-->发布到tomcat服务器
CI:英文全称:Continuous Integration
中文全称:持续集成工具
持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。
CD:英文全称:(CONTINUOUS DELIVERY)
中文全称:持续交付
持续交付就是讲我们的应用发布出去的过程。这个过程可以确保我们尽可能快的实现交付。这就意味着除了自动化测试,我们还需要有自动化的发布流,以及通过一个按键就可以随时随地实现应用的部署上线。
通过持续交付,您可以决定每天,每周,每两周发布一次,这完全可以根据自己的业务进行设置。
但是,如果您真的希望体验持续交付的优势,就需要先进行小批量发布,尽快部署到生产线,以便在出现问题时方便进行故障排除。
持续部署: 英文名称 CONTINUOUS DEPLOYMENT
如果我们想更加深入一步的话,就是持续部署了。通过这个方式,任何修改通过了所有已有的工作流就会直接和客户见面。没有人为干预(没有一键部署按钮),只有当一个修改在工作流中构建失败才能阻止它部署到产品线。
持续部署是一个很优秀的方式,可以加速与客户的反馈循环,但是会给团队带来压力,因为不再有“发布日”了。开发人员可以专注于构建软件,他们看到他们的修改在他们完成工作后几分钟就上线了。基本上,当开发人员在主分支中合并一个提交时,这个分支将被构建、测试,如果一切顺利,则部署到生产环境中。
Jenkins:
Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。
意思是我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL,将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到web容器中。
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。
Jenkins目标:是监控软件开发流程,快速显示问题,提高开发效率,过程控制。
Jenkins特性:
Jenkins工作流程图:
1. 开发者检入代码到源代码仓库。
2. CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
3. CI系统会在对应的工作区内执行构建过程。
4. (配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
5. (配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。
6. CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。
Jenkins就是这么一个CI系统。之前叫做Hudson。
JENKINS实战实例:
环境
github
192.168.10.5 部署jenkins 192.168.10.9充当tomcat网站的服务器
部署git
#####注:以下所用安装包可以去官网自行下载#########
安装依赖包: #yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
下载git::#wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
安装git:
解压编译git
#tar xf git-2.9.5.tar.gz
#cd git-2.9.5/
# make prefix=/usr/local/git all #编译源码包
#make prefix=/usr/local/git instal #源码安装
修改变量#vim /etc/bashrc #source /etc/bashrc 后测试git版本是否有误 # git --version
jdk环境部署
安装依赖包:#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
下载jdk包:#wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
修改环境变量:
#vim /etc/bashrc
#追加以下字段
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/bashrc
测试jdk:#java -vison #如已安装请卸载
部署maven:
下载解压maven:
# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
# tar xvzf apache-maven-3.5.3-bin.tar.gz -C /usr/local/
# mv /usr/local/apache-maven-3.5.3/ /usr/local/maven
修改环境变量:
#vim /etc/bashrc
export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
PATH=$M2:$PATH:$HOME/bin:/usr/local/git/bin
export JAVA_HOME=/usr/local/jdk
export PATH
# source /etc/bashrc
测试maven
部署tomcat:
官网下载解压:
apache-tomcat-9.0.1.tar.gz
# tar xvzf apache-tomcat-9.0.1.tar.gz -C /usr/local/
# mv /usr/local/apache-tomcat-9.0.1/ /usr/local/tomcat
定义tomcat所需要的变量
# vim /etc/profile
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
# source /etc/profile
#/usr/local/tomcat/bin/startup.sh #启动tomcat
测试tomcat:http://192.168.10.5:8080
部署Jenkins:
官网下载最新Jenkins
部署jenkins.war到tomcat下:
# cp jenkins.war /usr/local/tomcat/webapps/
注释
重置jenkins
关闭tomcat /usr/local/tomcat/bin/shutdown.sh
rm -rf /usr/local/tomcat/webapp/jenkins*
rm -rf ~/.jenkins*
启动tomcat即可访问jenkins
启动tomcat: 注意启动tomcat会自动解压webapps下的war包
# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
登录Jenkins
http://127.0.0.1:8080/jenkins #显示Jenkins的web界面
将文件密码输入粘贴到上述图片中
# cat /root/.jenkins/secrets/initialAdminPassword #密码各不相同
然后点击continue
选择suggested的插件进行下载,等待安装完成
#创建登录用户密码
#安装完成
#一切准备就绪,来到欢迎界面(老头)
管理插件:
配置的是 git + maven 方式的自动化部署, 所以需要git和maven的相关插件,ssh用于机器间的文件传送.
插件:Deploy to container的作用是支持自动化将代码部署到tomcat容器
安装步骤:系统管理-->插件管理-->可选插件-->过滤Deploy to container-->勾选,点击下边的按钮:直接安装
例图:
插件:Maven Integration的作用 jenkins 利用maven编译,打包,所需插件。
步骤同上,所有插件安装同第一个插件相同。
检查错误配置:
在web界面中点击“系统管理”
1.如果有“编码问题”错误,在Tomcat–>conf–>server.xml文件中修改即可
#######
[root@localhost ~]# head -1 /usr/local/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
如果弹出“反向代理错误”,请忽略。
Jenkins系统配置:(图示)
系统管理->(全局工具配置)Global Tool Configuration,配置jdk,git,maven的根目录
1.找到全局配置工具
2.配置JDK目录(不要点击“自动安装”)
3.配置git目录
4.配置maven
5.确认上述步骤设置无误并保存
SSH配置:
(192.168.10.5)jinkens服务器上的maven将开发产生的*.war包。通过SSH自动推送到远程tomcat 服务器上(192.168.10.9)。需要手工配置ssh key,配合自动化推送。
1.jenkins服务器准备秘钥
# ssh-keygen #回车一直
# ssh-copy-id -i 192.168.10.9
#ssh 192.168.10.9 # 登录不需要密码即可
2.准备私密密钥,粘贴到"Key"中
cat ~/.ssh/id_rsa #会出现很多行复制就行,粘贴到下图“key”中
新建任务:
创建名称->选择maven项目->确定
1.公有仓库(git)(如果是私有仓库,需要建立credentials身份认证)
2.选择版本控制器和仓库地址
3.设置构建(编译打包)
4.构建后操作
在构建后设置中 选择:(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.10.9上创建该目录。
用来存放网站源代码。(需要后台创建)# mkdir -p /jenkins/war
Exec command: tomcat(192.168.10.9)在接收到源码之后的自定义动作。
比如:将源码拷贝到网站的主目录(/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
最后保存。
构建任务:
1.构建图示步骤
2.构建输出结果
排错:
过程中所遇到的问题解决方案:
1.插件下载后继续下面初始化完成点开始的时候跳到一个空白页面
解决:点击地址栏左边的后退按钮即可进入正常页面
跟着提示错误安装相对应的插件。
2.脚本权限错误
解决:修改构建后的脚本权限
3.jenkins访问一直处于等待状态
解决:查看Tomcat日志,找到错误信息,按要求进行修改
只要在$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,问题解决!
操作中所出现问题不一一列举,希望各位可以自己上网自己一步一步解决,这样可以极大的加深印象以及学习效率。