1.jenkins是什么
jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。说得更直白点,就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言(比如:java, c#, php等)的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站,比如github、bitbucket直接集成。通过这个软件来管理我们正在开发的项目,可以让它来减少我们软件开发的时候的出错率,替我们把软件合到一起,并且将有问题的部分检测出来。
Jenkins可自由部署在各平台:Windows, Linux, Mac
2.什么是CICD
- CI(Continuous Integration):持续集成
- CD(Continuous Delivery):持续交付
- CD(Continuous Deployment):持续部署
我们先看一下软件开发演变的一个过程:
从第一台计算机出现以后,它就离不开程序的驱动,负责程序编写的人就叫做程序员,程序员是计算机的驾驭者。随着科技的不断发展,internet的相继出现,我们进入了全民拥抱信息化的时代,越来越多的企业开始将计算机作为办公用的工具,用以提升生产力。而普通个人用户也开始将计算机作为娱乐工具,用以改善生活品质。
于是,计算机的程序,开始变成了一门生意。程序,逐步演进为“软件(software)”,变成了最赚钱的产品之一。
在软件产业里,程序员有了更专业的称谓,叫做“软件开发工程师(Software Development Engineer)”,也就是我们常说的“码农”。
一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护。
起初,程序比较简单,工作量不大,一个人都可以完成。
随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升。一个人已经hold不住了,就开始出现了精细化分工。
码农的队伍扩大,工种增加。除了软件开发工程师之外,又有了软件测试工程师,软件运维工程师。
瀑布模型(Waterfall)
分工之后,早起采用的软件开发流程叫“瀑布模型(Waterfall)”。如下图。
瀑布模型,简而言之,就是等一个阶段所有工作完成之后,再进入下一个阶段。
这种模型比较理想化,大家各司其职,做好自己的事情即可。
但是项目不可能是单向运作的,同时客户也是有需求的,而且产品上线之后肯定也会有问题,需要改进。
随着时间推移,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少。在这个情况下,大家发现,笨重迟缓的瀑布式开发已经不合时宜了。
敏捷开发(Agile Development)
于是,软件开发团队引入了一个新的概念,那就是大名鼎鼎的——“敏捷开发(Agile Development)”。如下图。
敏捷开发大幅提高了开发团队的工作效率,让版本的更新速度变得更快。敏捷开发可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。
虽然敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于开发环节。研发们发现,运维那边,依旧是铁板一块,成为了新的瓶颈。
运维的核心诉求,就是不出问题。那么什么时候最喜欢出现问题呢?就是软件更新的时候。所以开发和运维之间就产生了矛盾。
DevOps
这个时候DevOps应时而生。DevOps这个词,其实就是Development(开发)和Operations(运维)两个词的组合。
DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠。
随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法,
持续集成:
开发人员将写好的代码合并到一个代码仓库中,每次提交都能通过自动化测试进行验证,从而使问题尽早暴露和解决。
持续交付:
是持续集成的扩展,将代码进行打包,构成镜像,传到镜像仓库。持续交付的本质是把每个构建成功的应用更新交付给用户使用。在持续交付的世界里,我们对完成的定义不是测试完成,而是交付到客户手中。持续交付的好处在于快速获取用户反馈,适应市场变化和商业策略的变化。开发团队保证每次提交的修改都是可上线的修改,那么决定何时上线,上线哪部分功能则完全由产品业务团队决定。
持续部署:
对于一个成熟的 CI/CD 管道来说,最后的阶段是持续部署。作为持续交付自动将生产就绪型构建版本发布到代码存储库的延伸,持续部署可以自动将应用发布到生产环境或者测试环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都得依赖精心设计的测试自动化。
实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。总而言之,所有这些 CI/CD 的关联步骤都有助于降低应用的部署风险,因此更便于以小件的方式(而非一次性)发布对应用的更改。不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期投资还是会很大。
3.jenkins部署
下载jenkins
[root@localhost ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.37.tar.gz index.jsp jenkins.war
将jenkins.war复制到/usr/local/tomcat/webapps/下面会自动生成jenkins目录
[root@localhost ~]# cp jenkins.war /usr/local/tomcat/webapps/
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs examples host-manager jenkins jenkins.war manager ROOT test
[root@localhost webapps]# cd jenkins
[root@localhost jenkins]# ls
bootstrap images 'Main$FileAndDescription.class' robots.txt
ColorFormatter.class JNLPMain.class Main.class scripts
css jsbundles 'MainDialog$1$1.class' WEB-INF
executable 'LogFileOutputStream$1.class' 'MainDialog$1.class' winstone.jar
favicon.ico 'LogFileOutputStream$2.class' MainDialog.class
help LogFileOutputStream.class META-INF
4.在浏览器进行访问
根据网页提示查看管理员密码
[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword
37e60c0856fa4ab7b720ce2d0eda8385
输入密码看到此界面,选择插件来安装
创建用户并设置密码
配置jenkins,重点
5.部署项目实例
新建任务
添加凭据
自动生成从仓库拉代码的脚本
编写pipline脚本
保存之后构建
测试