任务要求:
1、使用git提交代码到仓库;
2、实现自动代码发布系统;
1、了解DevOps的发展历程和思想;
2、学会git版本控制;
3、会使用github公有仓库和gitlab私有仓库;
4、了解CI/CD;
5、使用jenkins实现自动发布;
DevOps是一种实现Dev(开发)与Ops(运维)工作流有效联合的思想。
最终目标就是为了体现开发与运维有效结合方法,越是高级应用,越接近我们DevOps思想所阐述的做事方法。
最初:程序开发的所有环节,从规则说明书、到软件开发、到测试、到部署、再到技术支持。
软件工程师、网络管理员、数据库开发者、网页开发者、系统架构师、测试工程师等。
敏捷意味着开放和拥抱改变,但是改变太多的话,人们就很难专注到最终目标和交付上来。
此时精益软件开发就开始出现。
精益求精:目的就是为了进一步减少项目风险,实现快速交付。
1)杜绝浪费;
2)内建质量;
3)增强学习能力;
4)延迟决策;
5)快速发布;
越早获得客户反馈,越早安排开发事项;越短开发周期,越快从市场获得实时信息,为应变市场变化获得时间;
6)授权和尊重;
让团队成员知道工作全貌;
7)系统思考;
鼓励人与人之间的沟通,促进探讨如何生产处更好的产品和服务。
从精神上关注做正确的事情,同时能够让整个开发流程拥有足够的弹性。
DevOps:
软件开发团队一般会包括项目经理,系统架构师,前端开发者,后端开发者,测试工程师,网络工程师,运维工程师等。软件先由后端开发者、前端开发者进行开发,当软件开发完成,需要部署的时候,软件会通过自动化手段到达架构师,运维工程师等这些运维人员手上,由运维人员进行部署,发布即可。
如何让软件在开发、测试、运维及最终发布之间进行有效的流动,这就是DevOps所要关注的重点。
DevOps是一种文化、一种理念、是一种把开发、测试、运维及最终发布工作流进行联合的思想。
整个团队应该关注从需求被定义到开发,再到运维这个过程,直到价值被以服务的形式交付给最终用户。将这种方式带到实践中的产出便是永远不要将已知的缺陷传递到下游工作,永远不要为了局部优化影响了整体价值流交付,总是为了增加价值流动努力,永远追求对架构的深刻理解。
实践方法:
1)所有环境和代码使用同一个仓库,将软件包纳入版本管理;
2)团队共同决定发布流程;
3)保持DEV/TEST/PRODCTION环境的一致性;
4)自动化回归测试;
5)小步提交、每日部署;而不是一次部署大量变更;
6)更快、更频繁发布。
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。
放大反馈环:
几乎所有流程的改进都是为了从时间上缩短和从覆盖面上放大反馈循环,从而可以不断地进行必要的改正。
实践方法:
代码审查及配置变更检查
有纪律的自动化测试,使许多同时的小型敏捷团队能够有效地工作;
尽早地设置监控预警;
修复bug为团队最高优先级;
团队成员之间高度互相信任;
团队之间保持沟通和良好合作;
持续实验和学习的方法:
从失败中学习,通过反复实践来达到精通;
需要实验和冒着失败的风险,通过反复地试错来掌握使我们远离危险的技能。
实践方法;
故障模拟,把人工错误引入到系统中,加强系统的健壮性;
生产中部署一台服务器用于故障训练,以便练习服务器经常处于失效状态下的故障恢复能力。
团队有没有按照DevOps的思想去工作,可以按以下清单进行对照即可
版本控制概念:
什么是版本?
答:centos6.9 centos7是操作系统版本;nginx-1.10 nginx1-14这些属于软件的版本;一个配置文件或一个代码文件多次被修改,这些都有对应的版本。
什么是版本控制:
版本控制软件提供完备的版本管理功能,用于存储、跟踪目录文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件。
通过git记录每一次修改的信息。
常见的版本控制系统及比较:
cvs、svn、git都是版本控制系统。
腾讯tapd、百度icafe、阿里云效也是一站式的版本控制。
cvs和svn都是集中式的版本控制系统;
git是分布式的版本控制系统;
分布式版本控制系统可以不连网工作,因为版本库就在你自己的电脑上。
分布式版本控制系统可以没有中央服务器,每个人的电脑都是一个完整的版本库,可靠性高。
分布式版本控制系统也可以有一台充当“中央服务器”的电脑,但是这个服务器的作用是用来方便大家交换自己的修改,没有它大家都一样干活,只是交换修改不方便而已。