作者回复: 谢谢指正
“以前的运维工程师也纷纷变成了 DevOps 工程师。”是为了说明DevOps火爆,比如你可以到招聘网站去搜索一下职位。这其实也类似于“以前的软件测试也纷纷变成了QA”。
我也知道这个定义是有争议的,所以文中已经说明:“对于 DevOps 工程师的定义其实是有争议的”,并且“在这里我们没必要陷入这种争论,而是从 DevOps 实践的角度,来看看 DevOps 工程师,要做什么事情,可以帮助团队来实践 DevOps 的工作方式。”
对于DevOps这种观点,不像瀑布模型这种定义已经很明确了,大家都可能有不同解读很正常,但核心本质其实是类似的,就像楼上 @纯洁的憎恶 同学总结的那样:DevOps的道:开发与运维紧密协作的工作方式,以更快更可靠的构建、测试、发布软件。
所以要实施DevOps,不是说需要有一个实施手册,需要有一个教练,要有一个Title才可以,恰恰相反,如果你是遵循DevOps的道,开发与运维紧密协作,高效的构建、测试、发布软件,那就是DevOps的开发方式。
这其实也是专栏最开始就提到的:我们学软件工程,还是要掌握好其中的“道”,再通过“道”去学“术”和用“器”,而不是去追求“术”和“器”而反而忽视了“道”。
作者回复: 如果你要部署持续集成环境,可以先试试Jenkins或者Gitlab CI。如果你要部署日志和监控系统,可以试试ELK,也就是Elasticsearch、Logstash、Kibana三者的结合。网上可以找到很多安装使用教程。
作者回复: 👍你这个标题《Devops这样实施就对了》的建议不错
作者回复: DevOps目前解读比较多,我觉得如果什么都往里面装,那么DevOps就会变成“现代软件工程”了:)
作者回复: 👍👍非常好的总结和补充!
作者回复: 👍你们运维方向应该是没问题的,能站在技术的角度去思考如何更好的发现系统潜在问题。
运维如果往开发这边跨一点,能做的事情还挺多的,可以帮助搭建持续集成环境、搭建自动化监控、实现自动化部署等等。
作者回复: 自动化确实没有明确的定论,重要的是得要有应用自动化的意识,让自动化变成你项目开发流程的一部分,从而提升效率、改进质量。
应用自动化本质就是应用工具和基于工具二次开发,常用的自动化工具比如说自动测试框架、持续集成、日志监控报警。这些都是基础工具,还需要针对自己项目的环境,基于工具提供的API,去定制化的写配置脚本,让它可以适合你的项目。
最重要的还是要把这些工具整合到你的开发流程中,比如说:
当你提交代码的时候,持续集成能帮你自动运行自动化测试脚本,可以直观看到测试结果,根据结果再决定是否合并或者继续修改;
当你合并代码后,持续集成能帮你自动化部署到测试环境,并且构建生成生产环境的部署包,甚至帮你自动部署生产环境。
当你要部署的时候,通过自动化的脚本直接部署到生产环境,而不需要手工去干预太多,避免人为因素的失误。
当你部署上线后,通过日志监控报警系统能实时看到部署后的数据变化,及时发现问题。
这样的流程其实是比较通用的、大部分项目都是适用的,只是前期需要投入一定的时间精力去研究和搭建,但是搭建好了这样的整套自动化环境和建设好了相应的开发流程,相应的从效率和质量上的回报也是很大的。
作者回复: 自动化只是把重复的体力活做了。
自动化测试的话,还是需要测试人员写测试用例才能有更好的测试效果;
自动化部署和监控,也离不开专业运维人员的设计和搭建。
但是可以预见的是,以后低端的手工测试和运维岗位会被挤压的很厉害。如果你看大厂的招聘岗位,这些低端手工岗位都极少或者根本就没有。
作者回复: 1. 我觉得像对于嵌入式软件产品,一样要提倡紧密协作、自动化、可度量。所以DevOps对于软件企业,都是值得提倡的。
2. 如果从自动化和可度量的角度,是有不少软件产品的,比如像《26 | 持续交付:如何做到随时发布新版本到生产环境?》、《38 | 日志管理:如何借助工具快速发现和定位产品问题 ?》里面介绍的一些工具。
3. DevOps通常指开发(Dev)和运维(Ops),DevTestOps就是把测试(Test)也加进来了。其实本质都是指构建跨工种的协作文化。
作者回复: 👍发现问题是最关键的一步,解决问题的方案反倒是有很多选择。