Evernote Export
持续集成
持续集成,简单的说就是持续集成频繁的将代码集成到主干,它的好处主要有1.快速发现错误,没完成一点更新,就集成到主干,可以快速发现错误,定位错误也会比较容易,2.防止分支大幅偏离主干,如果不是经常持续集成的目的,就是让产品可以快速迭代,同事还能保持高质量。
持续交付
持续交付指的是,频繁的将软件的版本更新,交付给质量团队,以供评审,如果评审通过,代码将进入生产环节。
持续交付可以看做持续集成的下一步,不管如何更新,都满足持续交付。
持续集成的一般流程
根据持续集成的设计,代码从提交到生产,整个过程有以下几步:
1.提交
流程的第一步,是开发者向代码仓库提交代码,所有后面的步骤都始于本地代码的一次提交
2.测试(第一轮)
代码仓库对commit操作配置了钩子(hook),只要提交代码胡总合并进主干,就会跑自动测试
3.构建
通过第一轮测试,代码就会合并进主干,就算可以交付
交付后,就先进行构建,再进入第二轮测试,所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等
常见的构建工具jeknins、Travis、codeship
4.测试(第二轮)
构建完成,就要进行第二轮测试,如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要一道第一轮测试前面
第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试,所有测试以自动化为主,少数无法自动化的测试用例就需要人工跑。
5.部署
通过了第二轮测试,当前代码是一个可以直接部署的版本(artifact)
将这个版本的所有文件打包存档,发到生产服务器
生产服务器将打包文件,解包成本地的一个目录,再将运行路径的符号指向这个目录,然后重新启动,这方面的部署工具有ansible、Chef、Puppet等
6.回滚
认识DevOps
DevOps一词来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来是的软件构建、测试、发布更加快捷、频繁和可靠。
目前对DevOps有太多的说法和定义,不过它们都有一个共同的思想,"解决开发者和运维者之间曾经不可逾越的鸿沟,增强开发者与运维者之间的沟通和交流"
DevOps是一个框架,是一种方法论,并不是一套工具,他包括一系列的基本原则和实践
核心价值:
更快速地交付,影响市场的变化
更多地关注业务的改进与提升
为什么需要DevOps?
1.产品迭代
在现实工作中,往往都是用户不知道自己想要什么,但是当我们设计完一个产品后,他告诉我们不需要什么,这个就需要产品的迭代,而且过程是曲折的,那我们有什么好的办法快速交付价值,灵活的响应变化呢?
答案就是DevOps
因为DevOps是面向业务目标,助力业务成功的最佳实践
2.技术革新
现在的IT技术架构随着系统的复杂化不断的革新,从最初的所有服务在一个系统中,发展到现在的微服务架构,从纯手动操作到全自动流程,从单台物理机到云平台。
落实DevOps指导思想
高效的协作和沟通
自动化流程和工具
迅速敏捷的开发
持续交付和部署
不断学习和创新
敏捷管理:一支训练有素的敏捷开发团队是成功实施DevOps的关键
持续交付部署,实现应用程序的自动化构建,部署、测试和发布。
通过技术工具,把传统的手工操作转变为自动化流程,这不仅有利于提高产品开发、运维部署的效率,还将减少人为因素引起的失误和事故,提早发现问题并及时解决问题
版本控制系统
常见的版本控制管理工具
SVN
集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN,无法进行提交或备份文件。
Git
用分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用Git,当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库
Git
Git是一个分布式的版本控制系统,用于敏捷高效的处理和开发任何或大或小的项目
Git是Linux的作者为了帮助管理内核开发而开发的一个开放式源码的版本控制软件
Git与常用的版本控制工具CVS,等不同,它采用了分布式版本库的方式,不必与服务器端软件支持
Git与SVN的区别
1.Git是分布式的,SVN不是,这是Git和其他分布式版本控制系统,例如svn最核心的区别
2.Git把内容按元数据的方式存储,而SVN是按照文件,所有的资源控制系统都是把文件的元信息隐藏在一个类似svn,cvs的文件夹里
3.Git分支和SVN的分支不同,分支在SVN中是版本库的另外一个目录
4.Git没有一个全局的版本号,而svn有,目前为止这是svn相比git缺少的最大的一个特征
5.Git的内容完整性要优于SVN,Git的内容存储使用的是SHA-1哈希算法,这能确保代码内容的完整性,确保在遇到磁盘故障时降低对版本库的破坏。