Jenkins介绍

Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。
使用Maven(Ant)等来实现lava项目自动化构建发布部署。这些工具可以帮助在构建过程中实现自动化发布、回滚等动作。

Jenkins是一个用Java编写的开源的持续集成工具。官方网站:https://jenkins.io/
Jenkins能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能,还能用图表的形式,形象地展示项目构建的趋势和稳定性。

特点

  • 易安装:仅仅一个jenkins.war,丛官网下载该文件后,直接运行,无需额外的安装,
  • 更无需安装数据库;
  • 易配置:提供友好的GUI配置界面;
  • 变更支持:Jenkins能从代码仓库(SVN/Git)中获取并产生代码更新列表,并输出到编译输出信息中;
  • 支持永久链接:用户是通过Web来访问Jenkins的,而这些Web页面的链接地址都是永久链接地址,可以在各种文档中直接使用该链接;
  • 集成E-Mail/RSS/M:当完成一次集成时,可通过这些工具实时收取集成结果(构建-次集成需要花费一定时间,有了这个功能,就可以在等待结果过程中,干别的事情);
  • JUnit/TestING测试报告:也就是用以图表等形式提供详细的测试报表功能;
  • 支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
  • 文件指纹信息:Jenkins会保存构建集成所产生的jars文件、集成构建使用了哪个版;
  • 支持第三方插件:Jenkins支持第三方插件,这使得Jenkins功能变得越来越强大;

持续集成(CI)

含义:频繁的(一天多次的)将所有开发者的工作合并到主干上。
持续集成的核心在于确保新增的代码能够与原先代码正确的集成。与后续要介绍的持续交付以及持续部署,其最主要的差别也就在于其目标不同。
不过持续集成的流程还存在一定的异议:上图所示的流程为 Build -> Test,在阮老师的教程里头是 Test -> Build。不过,持续集成本身只不过是一种软件工程的方法或者策略,其并不规定具体的实现。在实际的应用中,还是需要结合具体的开发语言或者工具来定。

持续集成的优势

易于定位错误:每一次的代码集成都需要执行相关的测试工作,持续集成频繁的集成次数天然的将复杂的代码逻辑切割为了小块,也就使得每一次测试中遇到的错误能够更加容易的被定位;
易于控制开发流程:更为细致的工作提交也就意味着更容易判断当前的工作进度,这对于管理者规划开发流程而言提供了一个有效的参考,同时也为开发人员省下了汇报工作的时间;
易于减少不必要的工作:build 以及 test 过程的自动化可以为你节约一大票的时间,从而投入到有价值的工作中去

持续交付(CD)

持续交付 指的是:一种能够使得软件在较短的循环中可靠的发布的软件工程方法。
与持续集成相比,持续交付的侧重点在于 交付,其核心对象不在于代码,而在于可交付的产物。由于持续集成仅仅针对于新旧代码的集成过程执行了一定的测试,其变动到持续交付后还需要一些额外的流程。

持续部署(CD)

持续部署即在持续交付的基础上,把部署到生产环境的过程自动化。

Maven介绍

Maven项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。
由于Maven的面向项目的方法,许多Apache Jakarta项目发文时使用Maven,而且公司项目采用Maven的比例在持续增长。

传统网站部署流程

在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分析->原型设计->开发代码->提交代码->内网部署->内网测试->确认上线->备份数据->外网更新->外网测试->发布完成。如果在内网测试时发现代码有异常,返回代码开发人员名字,调整代码;如果在外网测试时发现外网部署的代码有异常,可以及时进行网站回滚。

Jenkins介绍及部署_持续集成

手动上线步骤

开发人员发起代码上线的需求(邮件中包含开发做好的WAR包)-)运维人员连接线上负载调度器(Nginx)–>隔离一组服务器(Tomcat)–>连接服务器(Tomcat)–>备份旧代码(tar打包)–>删除旧代码目录–>上传新的WAR包–>外网测试–>测试不通过则通过备份回滚代码–>测试通过则利用rsync的脚本推送代码到其他服务器–>统一外网测试->连接调度器恢复隔离机制–>隔离另一组服务器实施上线步骤–>上线完成。

目前主流网站部署流程

通过Hudson/Jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,属于开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。

开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVN、Git仓库即可。
运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新等操作。
测试人员:可以通过Jenkins进行简单的代码及网站测试

Jenkins介绍及部署_maven_02

Jenkins的工作原理

是先将源代码从SVN/Git版本控制系统中拷贝一份到本地,然后根据设置的脚本进行build(构建)。整个系统的关键就是build脚本,build脚本告诉Jenkins在一次集成中需要执行的任务。

Jenkins部署

Jenkins部署分为几种方式:

yum部署
docker部署
war包部署

yum部署:

1)安装JDK环境

[root@bogon ~]# yum search jdk # 查看jdk有那些可安装的软件包
[root@bogon ~]# yum install java-1.8.0-openjdk.x86_64 -y
[root@bogon ~]# java -version # 验证JDK环境是否安装完成
openjdk version “1.8.0_275”
OpenJDK Runtime Environment (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)

2)安装Jenkins

2.1)导入Jenkins的Yum文件

[root@bogon ~]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

2.2)导入公钥

[root@bogon ~]# sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

2.3)安装Jenkins

[root@bogon ~]# yum list --showduplicates jenkins # 查看Jenkins有哪些版本
[root@bogon ~]# yum install jenkins-2.276-1.1 -y
[root@bogon ~]# cat /etc/sysconfig/jenkins # Jenkins配置文件所在路径
[root@bogon ~]# systemctl start jenkins

访问Jenkins,默认端口8080
http://本机IP地址:8080

Jenkins介绍及部署_持续交付_03
看到上图图片进行如下操作,切换Jenkins安装地址默认是使用google切换清华源。
好处就是安装Jenkins插件的时候会快一点这样不会出现有的插件安装不上,以及解决慢的问题

[root@bogon ~]# cd /var/lib/jenkins/	# Jenkins工作目录
[root@bogon jenkins]# sed -i 's#updates.jenkins.io/update-center.json#mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json#g'  hudson.model.UpdateCenter.xml
[root@bogon jenkins]# sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' updates/default.json 
[root@bogon jenkins]# sed -i 's#http://www.google.com#https://www.baidu.com#g' updates/default.json
[root@bogon jenkins]# systemctl restart jenkins

再次重新访问Jenkins

[root@bogon jenkins]# cat /var/lib/jenkins/secrets/initialAdminPassword # 记录了Jenkins初始密码
5e1aed02635449519679b2846626957b # 将查看到的内容粘贴到Web页面–>点击继续

Jenkins介绍及部署_maven_04
Jenkins插件安装完成之后创建一个Jenkins管理用户
Jenkins介绍及部署_json_05
Jenkins介绍及部署_docker_06
Jenkins介绍及部署_持续集成_07
到此为止Jenkins Yum方式安装成功

Docker部署

如果用Docker安装的话那首先需要确保自己本机已经安装Docker环境------安装比较简单所以就省略

1)安装Jenkins容器

[root@k8s-master01 ~]# docker search jenkins		# 查看Jenkins容器
NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
jenkins                                 Official Jenkins Docker image                   5046      [OK]       
jenkins/jenkins                         The leading open source automation server       2388                 
jenkinsci/blueocean                     https://jenkins.io/projects/blueocean           593                  
jenkinsci/jenkins                       Jenkins Continuous Integration and Delivery …   384                  
jenkins/jnlp-slave                      a Jenkins agent which can connect to Jenkins…   134                  [OK]
jenkinsci/jnlp-slave                    A Jenkins slave using JNLP to establish conn…   128                  [OK]
jenkinsci/slave                         Base Jenkins slave docker image                 65                   [OK]
jenkinsci/ssh-slave                     A Jenkins SSH Slave docker image                43                   [OK]
...
...
...
[root@k8s-master01 ~]# docker pull jenkins/jenkins:latest		# 下载Jenkins容器

2)创建一个目录用于存放Jenkins数据

[root@k8s-master01 ~]# mkdir /home/jenkins
[root@k8s-master01 ~]# chown 1000.1000 jenkins/
[root@k8s-master01 ~]# docker run -d --name jenkins -p 8088:8080 -v /home/jenkins:/var/jenkins_home  --restart always --privileged=true  -u root jenkins/jenkins:latest
[root@k8s-master01 ~]# cd /home/jenkins/
[root@k8s-master01 jenkins]# sed -i 's#updates.jenkins.io/update-center.json#mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json#g'  hudson.model.UpdateCenter.xml
[root@k8s-master01 jenkins]# sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' updates/default.json
[root@k8s-master01 jenkins]# sed -i 's#http://www.google.com#https://www.baidu.com#g' updates/default.json
[root@k8s-master01 jenkins]# docker restart jenkins

3)访问一下Jenkins
http://localhost:8088

[root@k8s-master01 jenkins]# docker exec -it jenkins bash
jenkins@1492df8fd1ae:/$ cat /var/jenkins_home/secrets/initialAdminPassword
9fb067231e884de2a1c4e6777fef69b3

接下来的步骤跟YUM安装一样,在这里就不做演示了