1.基础
1.软件开发生命周期
- 1.
SDLC
(Software Development Life Cycle
):软件开发生命周期,其是计划,开发、测试和部署过程的集合
- 1.需求分析
- 2.项目设计
- 3.项目实现
- 4.测试
- 5.运维
2.软件开发模型
1.瀑布模型(淘汰)
- 1.高度化的结构流程,只能向一个方向上流动,按部就班,不能回退
- 2.优点
- 1.理解简单,方便适用
- 2.当前一阶段完成后,只需要关注后续阶段
- 3.为项目提供了按阶段划分的检查节点
- 3.缺点
- 1.各个阶段的划分完全固定,阶段之间产生大量的文档,工作量大
- 2.由于瀑布模型是线性的,只有等到过程的末期才能获得开发成果,从而增加了开发风险
- 3.突出缺点是
不适应用户需求的变化
2.敏捷开发模型(推荐)
- 1.敏捷开发(
Agile Development
)核心
- 1.迭代开发(
Iterative Development
):将开发过程拆分成多个小周期,每次小开发都是同样的流程,同时每次迭代都是一个完整的软件开发周期
- 2.增量开发(
Incremental Development
):每一个小周期都产生对应的一个版本,该版本会增加新的功能- 2.优点
- 1.可以早期交付,从而大大降低成本
- 2.可以了解市场需求,降低产品不适用的风险
3.持续集成(CI)
- 1.持续集成(
Continuous integration,CI
):持续将代码集成到代码仓库的主干,代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败就不能集成,持续集成
是快速迭代
的基础
- 2.优点
- 1.产品可以快速迭代,同时还能保持高质量
- 2.通过持续集成可快速的从一个功能过渡到另一个功能
1.持续集成的流程
- 1.
提交(commit
):开发者向代码仓库提交代码,后面的步骤都始于本地代码的一次提交- 2.
测试(第一轮
):代码仓库对commit
操作配置了钩子(hook
),只要提交代码或合并进主干,就会执行自动化测试- 3.
构建(build
):将源码转换为可运行的实际代码,通过第一轮测试,代码可以合并进主干,然后进行构建,再进入第二轮测试- 4.
测试(第二轮
):构建完成,就进行第二轮测试,如果第一轮已经涵盖了所有测试内容,第二轮可省略- 5.
打包部署
:如果通过测试,则当前代码是一个可部署的版本(artifact
),将这个版本的所有文件打包存档,发到生产服务器部署启动- 6.
回滚
:一旦当前版本发生问题,需要回滚到上一个版本的构建结果
2.持续集成的组成要素
- 1.
自动构建过程
:从检出代码,编译构建,运行测试,结果记录,测试统计等都是自动完成,无需人工干预- 2.
代码存储库
:需要版本控制软件来保障代码的可维护性,一般使用svn
或git
- 3.
持续集成(CI)服务器
:推荐Jenkins
作为持续集成服务器
3.持续集成的好处
- 1.降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价小
- 2.对系统健康持续检查,减少发布风险带来的问题
- 3.减少重复性工作
- 4.持续部署,提供可部署单元包
- 5.持续交付可供使用的版本
4.持续部署(CD)
- 1.持续交付(
Continuous Delivery,CD
)/持续部署(Continuous Deployment,CD
)
- 1.持续集成
CI
完成构建、单元测试和集成测试等自动化流程后,持续交付CD
可以自动把已验证的代码发布到企业的代码存储库- 2.持续交付
CD
目的:建立一个可随时将开发环境的功能部署到生产环境的代码库
- 1.持续交付
CD
的过程中,每个步骤都涉及到了测试自动化和代码发布自动化,流程结束后运维团队可以快速、轻松地将应用部署到生产环境中- 2.对于一个完整、成熟的
CI/CD
管道来说,最后的阶段是持续部署,其作为持续交付的延伸,持续部署可以自动将应用发布到生产环境- 3.
CD
指的是持续交付/持续部署,这些相关概念有时会交叉使用,两者都事关管道后续阶段的自动化,但有时也会单独使用,用于说明自动化程度- 4.持续交付(第一种
CD
)通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库,然后由运维团队将其部署到实时生产环境中,因此持续交付的目的就是确保尽可能减少部署新代码时所需的工作量- 5.持续部署(另一种
CD
)指的是自动将开发人员的更改从存储库发布到生产环境,以供客户使用,主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题
5.DevOps
- 1.持续交付是持续集成的延伸,而持续部署又是持续交付的延伸,通常将不同环境发布和测试过程称为部署流水线,并把部署到生产环境的过程实现自动化
- 2.
DevOps
是CI/CD
思想的延伸,CI/CD
是DevOps
的基础核心,如果没有CI/CD
自动化的工具和流程DevOps
是没有意义的
2.Jenkins
1.定义
- 1.
Jenkins
是一款开源CI/CD
软件,用于各种自动化任务,包括构建、测试和部署软件
2.特点
- 1.基于
Java
语言开发的开源的持续集成工具,支持持续集成,持续部署- 2.易安装部署配置:可通过
yum
安装或下载war
包以及通过docker
容器等快速实现安装部署,可方便web
界面配置管理- 3.消息通知及测试报告:集成
RSS/E-mail
通过RSS/e-mail
发布构建结果,并生成JUnit/TestNG
测试报告- 4.分布式构建:
Jenkins
支持让多台计算机一起构建/测试- 5.文件识别,
Jenkins
能够跟踪构建生成的jar
以及其使用的版本等信息- 6.丰富的插件支持:支持扩展插件,可开发适合使用的工具(
git
,svn
,maven
,docker
等)
3.执行流程
- 1.开发人员进行代码提交,提交到
Git
仓库- 2.使用
Jenkins
作为持续集成工具,使用Git
工具到Git
仓库拉取代码到集成服务器,再配合JDK
,Maven
等软件完成代码编译,代码测试与审查,测试,打包等工作(注意:这个过程中每一步出错,都需再重新执行一次整个流程)- 3.最后
Jenkins
把生成的jar
或war
包分发到测试服务器或者生产服务器
4.安装部署完整案例
1.准备工作
- 1.准备三台
Linux
虚拟机(CentOS7
)
- 1.一台安装
GitLab
作为代码仓库
- 2.一台安装
Jenkins、JDK、Git、Maven
作为持续集成服务器
- 3.一台安装
Tomcat
服务器作为测试服务器
- 2.参考
Linux操作命令
中的启动、快照,克隆
生成三台ip
不同的Linux
虚拟机
2.代码仓库
- 1.参考
Linux软件安装
中的Linux系统下安装GitLab
3.持续集成服务器
- 1.参考
Linux软件安装
中的Linux系统下安装Jenkins
1.插件安装
- 1.
Jenkins
本身不提供多功能,可通过插件来完成需要的功能(GitLab
代码拉取,Maven
构建项目)- 2.
Jenkins
国外官方插件地址下载速度慢,需要修改为国内插件地址- 3.步骤:
Jenkins
->Manage Jenkins
->Manage Plugins
->Available
4.测试服务器