一、前言
在软件开发生命周期中,通常会遇到以下两个瓶颈:
- 在需求分析和系统开发阶段之间,针对不断变化的需求,对软件开发者提出了高要求,所以出现了
敏捷开发方法论
,强调需求敏捷响应、快速迭代、持续交付。- 在系统开发和构建部署阶段之间,大量完成的开发任务可能阻塞在应用部署阶段,影响交付,于是有了
DevOps
。
我们之前已经听到很多谈论DevOps
和DevOps
世界最新趋势的事情,但是就DevOps
工程师本身,到底干些什么工作呢?
从最纯粹的存在形式上来说,DevOps
工程师是为了加快开发和运营团队之间的交付效率而存在的桥梁。
二、DevOps 工程师在软件生命周期中能带来什么?
在传统的软件系统交付周期中,软件开发人员会在经年累月的编写代码后,将软件交给QA团队
进行测试,然后将最终版本交给运营团队
部署。这三个阶段,即开发,测试和部署之间是缺乏协作的。
开发编写的代码最终并交给运维团队,然后运维团队来解决代码部署过程中出现的问题,或者将代码交还给开发团队来解决遇到的问题。所有这些都导致了软件开发过程的放慢。
但是在DevOps
模式下,这三个团队不再孤立。大多数时间内,从开发、测试、部署到运营,相关的工程师合并成一个团队并且贯穿整个软件生命周期,开发不再限制于某一个技能而是一整套技术解决方案
。当然安全团队也因此有可能在这个软件生命周期中与开发和运营更紧密地工作,以便及早发现安全问题。
三、为什么 DevOps 工程师的角色各不相同呢?
DevOps
工程师并不是什么新鲜事物。比如系统工程师,自动化工程师,软件工程师,Linux工程师等等工程师都能成为DevOps工程师。
但是,DevOps工程师的工作性质因组织而异。比如有些是在基础设施自动化和维护中发挥作用,而在另外一些组织中却是在整个交付链中发挥作用而已。
DevOps工程师的角色各不相同,因为他必须通过克服传统协作障碍与开发和运维人员进行协作。而不同的组织有不同的障碍,因此其扮演的角色自然不同。
四、DevOps 工程师日常工作中最重要的两个方面
尽管DevOps工程师的角色各不相同,但几乎所有DevOps工程师每天都会触及两件事 - 自动化
和持续集成
。
4.1 自动化
与维护基础设施有关的大部分任务仍然是手动的。公司更喜欢使用传统的经过验证的方法,而不是自动化流程,因为他们不想冒任何风险。但事实是自动化任务将有助于更快速地开发和部署软件,这意味着能加快公司从客户处赚取利益的速度。
为了阐明这一点,我们可以考虑下面这个情况:
系统工程师如果每天按要求手动备份所有服务两次,那么他可以通过在云端设施上编写脚本来完成这项工作而不是浪费时间来完成这项工作。通过自动执行备份过程,可以让系统工程师更专注于重要的事情,例如对由于某些虚拟机问题而需要关闭的服务进行故障排除。手动执行相同的操作会导致您的系统工程师负担过重,而这些工程师的效率将大大降低。这只是一个非常简单的例子,通过不实施自动化来阐述资源浪费的概念。
DevOps
因此可以作为敏捷的扩展,因为它可以降低由于开发人员、QA和运维团队之间的非协作而可能出现的风险。DevOps
通过认识到高质量的软件开发要求包括质量保证和运营专家在内的所有利益相关方的持续参与和反馈,扩大了敏捷原则的范围。
有很多事情可以通过自动的方式来完成,比如在发布新补丁的时候更新Apache Web
服务器,更新部署在服务器上的开源软件版本。
DevOps工程师可以通过创建脚本环境自动完成配置服务器的过程。可以在一个节点上运行脚本,但如果在数千上百个节点上手工运行相同的脚本将变得不切实际。脚本在这里就变得不再是一个可扩展的解决方案了。
因此,需要以可扩展的方式跨大量节点自动化进行软件配置、配置管理和应用程序部署。这是配置管理工具(如Chef
,Puppet
和Ansible
)在DevOps
世界中派上用场的地方。
前端资料汇总
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿。