一.Devops与CI/CD
1.Devops
<1>是什么
Devops是开发和运维的简写,强调的是自动化
自动化:以批量的方式通过脚本或平台,自动的对代码进行部署,自动的对代码回滚,自动的对一些配置进行变更
研发:就是开发
运维:大公司分工明确(网络管网络,数据库管数据库,硬件管硬件,系统管系统,监控管监控)
质量:就是测试
<2>为什么用
目的是为了做到持续集成,持续部署,持续交付
优势:
能做到版本的快速迭代,并且快速交付(更快的把应用交付到生产环境),它的可靠性能保证交付的结果是成功的,它的安全性(测试)能够快速迭代的同时能保证应用的质量
<3>Devops平台的一些理念
代码托管:gitlab/svn
项目管理:jira/禅道/Teambition
运维平台:腾讯蓝鲸/自主研发的平台
持续交付:jenkins/gitlab
2.CI / CD
<1>软件开发发展
I.软件开发生命周期
软件开发生命周期又称SDLC(software development life cycle),集合了计划,开发,测试和部署过程的集合
i.需求分析
生命周期第一阶段,由公司内部员工或第三方客户提供需求的文档
ii.设计
涉及到设计架构,部署架构(也就是说项目如何制作,有哪些功能,如何完成)
iii.实现
编码阶段,根据项目大小和复杂程度,项目经理给开发工程师创建和分配工作
iv.测试
测试人员完成,如果团队规模小,开发也需要做测试的工作,测试内容一般包含功能测试,代码测试,压力测试等
iv.进化(维护)
开发好产品以后,对产品提出的优化和改进的建议,以及针对用户的使用情况做出的功能bug修复
II.软件开发模型
i.瀑布模型
①.是什么
1).开发简单软件使用的项目开发架构,提供了软件开发的基本框架;
2).将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品;
3).其过程是将上一项活动的输出作为该项活动的输入,利用这一输入实施该项活动应完成的内容,然后对当前活动的工作结果进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。
②.瀑布模型的管理框架
1).线性工序,上一阶段的输出是下一阶段输入
2).文档驱动
3).下一阶段有缺陷,必须回到上一阶段
③.瀑布模型优缺点
ii.敏捷开发模型
①.敏捷开发的核心是迭代开发与增量开发
迭代开发:
比如传统大型软件项目开发周期为一年,整个过程就是一次大开发,迭代开发就是把开发过程拆分成多个小周期,就是把一次大开发变成多次小开发
增量开发:
与迭代开发有关联,迭代是把大周期拆分成小周期,而每一个小周期也需要不同可用的版本,也就是说每一个小周期结束应该给用户交付一些可用的产品
②.敏捷开发如何迭代
虽然敏捷开发将软件开发分成多个迭代,但要求每次迭代都是一个完整的软件开发周期
iii.瀑布开发与敏捷开发比较
以房地产公司开发开发10栋楼房作为小区为例:
①.传统开发,比如瀑布模型:把10栋楼的地基打好;构建每栋楼的骨架;架设每栋楼的屋顶;给10栋楼铺砖;给每栋楼装修
②.敏捷开发:第一次迭代就是交付一栋楼,期间包括这栋楼的打地基,构建骨架,架设屋顶,铺装装修整个过程;10栋楼就是做10次这样的迭代
<2>.持续集成(简称CI)
持续集成:多名开发者在开发不同功能代码的过程中,可以频繁的将代码合并到一起并且互相不影响工作
1)持续集成与敏捷开发的联系
频繁的将代码集成到代码仓库的主干;
持续集成的目的是让产品快速迭代,还能保持高质量(也就是说敏捷开发能够更好的完成要归功于持续集成,即一个团队有了持续集成的环境以后能够更好的完成敏捷开发)
2)持续集成的流程
持续集成的重点在于集成,集成的是团队代码而不是开发人员个人的代码,就是说项目的代码需要被集成起来,然后按流程做:
①.提交代码
流程的第一步,是开发人员把代码提交到代码仓库,后面步骤都基于本地代码的一次提交(commit)
②.测试(第一轮)
代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并主干,就会用自动化工具跑自动化测试
③.构建
通过第一轮测试,代码就可以合并进主干,就算可以交付了;交付后,先进行构建(build),在进行第二轮测试。构建指的是把源码转化为可以运行的实际代码,比如安装依赖,配置各种资源(样式表,JS脚本,图片)等(即构建指把代码编译成可执行文件或其他可运行的产品的文件)
④.测试(第二轮)
构建完成,进入第二轮测试。如果第一轮测试已经完成了所有测试内容,第二轮可以省略
⑤.部署
完成第二轮测试,当前代码就是一个可以直接部署的版本(artifact),将这个版本的所有文件打包(tar filename.tar*)存档,发到生产服务器
⑥.回滚
一旦当前版本发生问题,就要回滚到上一个版本的构建结果,最简单的做法就是修改符号链接,指向上一个版本的目录
iv.CI组成要素
持续集成的流程有哪些元素的参与(它是怎么做的):总结起来他是一个自动化构建的过程,必须有代码仓库的参与,还要有持续集成服务器软件的支撑
1)自动构建过程
持续集成一定是一个自动化构建的过程;讨论持续集成的时候要讨论自动化的过程而不是人工的过程,他的流程是自动化的,不需要人工干预;
这些自动化的过程需要依赖软件支撑,下面就学习通过哪些软件来搭建自动化的构建过程
2)代码仓库的参与
代码仓库就是控制项目源码的版本,并且可以进行更好的维护,同时作为构建过程的素材库,可以用Git或者SVN;
因为CI重点在于集成,而集成是集成团队的代码,所以需要版本控制工具
3)持续集成服务器
可能是一台,也可能是多台服务器;
可以安装Jenkins软件,他就可以做持续集成服务器
v.为什么用
持续集成的目的是让产品快速迭代,还能保持高质量(也就是说敏捷开发能够更好的完成要归功于持续集成,即一个团队有了持续集成的环境以后能够更好的完成敏捷开发)
<3>持续部署(CD)
基于工具或平台实现代码自动化的构建,测试和部署到线上环境以实现交付高质量的产品,持续部署代表了一个开发团队的更新迭代速率
<4>代码部署的流程(面试)
先把代码部署到测试环境,先测试一下代码部署构建之后,有没有一些基本的bug或者功能缺陷;再然后就是部署到预发布环境再次测试一下有没有bug,如果没有问题了,最后就部署到生产环境了
2.Jenkins
<1>是什么
i.持续集成是需要持续集成服务器来作为集成工作的支撑,Jenkins就是能够用来搭建集成服务器,完成自动化构建过程的一款软件
ii.Jenkins是开源的持续集成工具,有1000多个插件用来完成自动化构建,测试和部署等功能
iii. CI/CD软件的开源领导者
<2>怎么用
使用Jenkins搭建集成服务器的持续集成流程说明
i.开发人员把代码通过版本控制工具提交到代码仓库
ii.Jenkins作为持续集成工具,使用版本控制到代码仓库拉取代码到集成服务器,再配合JDK,Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,再这个过程中每一步走错,都重新在执行一次整个流程
iii.Jenkins把生成的jar或war包分发到测试服务器,测试人员就可以访问应用
二.Gitlab
Gitlab是基于git的一个私有代码仓库,可以用来实现持续集成(CI)
1.Gitlab安装与Git命令使用
centos:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
2.Gitlab实现持续集成
gitlab里的对应关系
projects:服务
groups:项目
3.Gitlab实现分支管理
三.jenkins
1.jenkins简介及安装
2.jenkins持续集成环境配置
<1>插件管理及基础配置
<2>用户权限管理
<3>凭证管理
3.jenkins构建项目
<1>jenkins构建的项目类型
<2>自由风格项目构建
<3>maven项目构建
<4>pipeline流水线项目构建
4.jenkins构建项目的细节
<5>常用的构建触发器(jenkins内置的)