Git--自动化上线代码
版权声明:原创作品,谢绝转载!否则将追究法律责任。 ————— 作者:kirin
(一)、自动化上线代码基本介绍
1.CI/CD基础概念
1.1 软件开发生命周期
项目立项-->需求调研-->需求拆解-->交给不同的开发进行开发-->测试环境测试-->部署生产环境。
1.2 什么是环境
一个软件产品从开发到用户使用涉及的开发环境、测试环境、预发布环境、生产环境这是都是什么意思?
1、开发环境: 开发同学开发时使用的环境
2、测试环境: 一般会由测试人员自己来部署,然后在此环境进行测试。
3、预发布环境: 测试环境到生产环境的过渡。测试环境可能会受到一些限制,一些流程或者数据没有测试到,就可以在预发布环境进行验证,从而保证产品上线质量。
4、生产环境: 即线上环境,用户使用的环境。由运维人员来维护,其他人员几乎无权限。
预发布环境和生产环境区别:
1、预发环境中新功能为最新代码,其他功能代码和生产环境一致。
2、预发环境和生产环境的访问域名不同。
注意事项:预发布环境一般会连接生产环境的数据库,测试时要注意,以免产生脏数据,影响生产环境的使用。
1.3 什么是代码部署
代码发布是指将开发写好的代码部署至指定的 web 服务器,然后对外提供服务。
1.4代码发布的方式
发布方式 | 效率 | 干扰 | 安全性 |
---|---|---|---|
手动发布 | 慢 | 干扰因素多 | 不安全 |
自动发布 | 快 | 干扰因素少 | 安全 |
1.4.1 手动发布
手动发布有如下几种方式
1.开发通过QQ、Weixin发送代码压缩包,rz 上传,解压部署。
2.scp方式上线代码。
3.xftp方式上线代码。
4.登陆代码托管平台,手动执行git pull。
手动上线方案缺点
1.全程运维参与,占用大量时间。
2.如果节点多,上线速度慢。
3.人为失误多,目录管理混乱。
4.回滚不及时,或者难以回退。
1.4.2 自动发布
在介绍自动化代码上线前,需要先引入三个概念: 持续集成、持续交付、持续部署。( 作为了解 )
(二)、什么是持续集成
2.1 什么是集成
在说持续集成前,我们先了解下什么是 “集成”。在实际的软件开发中,常常会有如下两种场景:
1. 现在有一个电商平台需要开发,由于平台需要开发的某块较多,此时就需要不同的开发人员开发不同的某块,最后将所有人开发好的代码集成到一个系统中。集成完毕后需要对其进行部署上线。
2. 随着时间的推移,该系统无论是bug修复、还是新功能开发,后续都需要对系统进行不断的更新迭代。
PS:了解了 “集成” 的概念之后,“持续集成” 的概念就好理解了。
2.2 什么是持续集成
持续集成指的是,频繁地(一天多次)将代码集成到主干。 (PS: 重复如上集成的工作)
2.3 持续集成的好处
1、快速发现错误。(每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。)
2、节省人力成本。
3、加快软件开发进度。
2.4 持续集成的目的
使用持续集成来简化我们的工作,同时还能让我们的产品快速迭代,保持高质量的产出。
(三)、什么是持续交付
持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境-->交付给测试团队。
持续交付:代码开发->单元测试->合并代码-->测试-->部署到预生产环境-->交付给测试团队。
(四)、什么是持续部署
持续部署是持续交付的下一步,指代码在任何时刻都是可部署的。最后将部署到生产环境的过程自动化。
持续部署:代码开发->单元测试->合并代码-->测试-->部署到生产环境。
(五)、完整代码发布流程
完整代码发布流程如下:
第一步、提交代码
开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)。
第二步、测试(第一轮)
代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。测试有分为如下几种: PS:第一轮跑单元测试
单元测试:针对函数或模块的测试
集成测试:针对整体产品的某个功能的测试,又称功能测试
端对端测试:从用户界面直达数据库的全链路测试
第三步、构建
编译也称为构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等。
第四步、测试(第二轮)
构建完成,就要进行第二轮全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例,就要人工跑。
PS:需要强调的是,新版本的每一个更新点都必须测试到。如果测试的覆盖率不高,进入后面的部署阶段后,很可能会出现严重的问题。
第五步、部署
通过了第二轮测试,当前代码就是一个可以直接部署的版本。将这个版本的所有文件打包存档,发到生产服务器。生产服务器将打包文件,解包成本地的一个目录,再将运行路径的 “符号链接” 指向这个目录,然后重新启动应用。这方面的部署工具有Shell、Ansible、SaltStack。
第六步、回滚
一旦当前版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。然后重新启动应用即可。
本文来自博客园,作者:kirin(麒麟),转载请注明原文链接:https://www.cnblogs.com/kirin365/articles/16343867.html