一个 DevOps 面试小宝典
转载自:https://mp.weixin.qq.com/s/dFY1TdHsIYg125HJQRM2DA
DevOps 是敏捷开发的产物,也越来越受到谷歌、Facebook 或亚马逊等大型企业的关注。因此,当你要申请 DevOps 工程师岗位时,除了所需的专业技能外,准备充分的 DevOps 工作面试,对于成功拿到 Offer 也至关重要。
-
什么是 DevOps?
简而言之,DevOps 意味着组织中开发 (Dev) 和运维 (Ops) 团队之间的协作,通过持续集成和持续交付,为用户提供更好的产品。因此,它可以降低软件开发和运维团队之间的风险,有助于提高交付速度,增强企业的市场竞争力。 -
什么是持续集成?
持续集成 (CI) 是一个开发过程,每天多次将代码集成到共享存储库中。借助自动化测试,CI 帮助允许团队及早识别错误、轻松定位问题,提高了软件质量并缩短了交付时间。 -
什么是持续交付?
持续交付 (CD) 与持续集成相集成,以向用户顺利交付产品。它旨在确保代码可以安全地部署到生产环境中。在 CD 环境中,无论是大型系统还是复杂的应用程序,新版本都可以立即按需执行,功能齐全,而且只需要极少的人工干预。 -
什么是持续部署?
持续部署进一步推进了持续交付,其中代码被构建、部署到生产环境、还可以自动测试并在发生错误时快速回滚。具体来说,每个更改都会直接部署到生产环境中,无需额外的人工干预。 -
什么是持续测试?
持续测试是软件交付流水线的一部分。在 CI/CD 工作流中,构建往往以小批量进行。因此,为每次构建,手动运行测试用例会非常耗时。持续测试借助自动化手段,尽早、逐步和充分地执行测试,从而减轻手动工作的负担。这逐渐成为 DevOps 文化的关键。 -
什么是版本控制?
版本控制(或源代码控制)是一个软件工具系统,能够记录和检查代码随时间的所有变化。版本控制能够跟踪每个代码开发,允许开发人员在出现任何错误时回滚,还可以与以前的版本进行比较,来最终确定最佳版本。 -
什么是 Git?
Git 是一个版本控制系统。早期出现的版本控制系统有:SVN、CVS等,它们是集中式版本控制系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同合作的开发人员都通过客户端连接到这台服务器,取出最新的文件或者提交更新。
而Git 是分布式版本控制系统,没有中央服务器的概念,我们使用相关的客户端提取的不只是最新的文件,而是把代码仓库完整地镜像下来,相当于每个人的电脑都是一个完整的版本库,这样的话,任何一处协同工作的服务器出现故障,都可以用任何一个本地仓库恢复。
- DevOps 如何使团队受益?
如今,组织正试图通过其强大的部署系统,将产品快速交付给用户,以跟上各种竞争对手的步伐。
这就是 DevOps 出现的地方。DevOps 能够为整个软件开发流水线提供敏捷性和灵活性,快速将产品交付给用户。
- DevOps 对开发人员有什么帮助
如果没有 DevOps,开发团队会从头开始进行新代码开发,构建,等待运维团队进行部署。然后,等待反馈。如果有错误,他们将不得不返回并重新修复它。团队之间所需的沟通是无法估量的。
DevOps 将开发人员的任务缩减为仅编写代码,借助CI/CD 流水线接管其余任务,包括整合和自动化。DevOps 还使所有团队成员都可以访问流程,从而使团队协作中的沟通更加透明。
- 为什么 DevOps 最近在软件交付中越来越受欢迎?
DevOps 近年来流行的主要原因是它允许组织简化所有软件流程并将其转化为商业价值。
随着技术的快速创新,DevOps 和敏捷方法被广泛采用以促进动态运维,而不是落后于其他人。Facebook、Google 和 Netflix 的成就证明了 DevOps 在持续部署方法中的应用,没有任何中断。
- CI/CD 的好处是什么?
CI 和 CD 将所有代码更改整合到一个共享存储库中并自动化操作。CI/CD 是现代开发环境的支柱,产品可以根据客户期望快速、高效和自动地更新。
简而言之,精心设计的 CI/CD 流水线帮助企业从更快的发布和可靠性中,获得极大的客户满意度,同时减少代码更改和缺陷。
- 持续交付有哪些好处?
团队过去常常通过手动方式发布代码,来实现产品的迭代。但是,有时新版本意味着具有特定业务目标的促销策略。
CD 使 IT 专业人员能够自动执行重复性和乏味的任务,在确保合规性和安全实践的同时,帮助团队节省了时间。
- 持续部署有哪些好处?
通过评估拉取请求并将它们组合到主分支,持续部署为开发人员提供了对流水线末端产品的的关注。它允许企业快速部署、验证新功能,并在测试自动化完成后立即做出响应。
有了持续部署流水线,一旦客户提交质量问题,团队就可以轻松处理新版本的错误,因为每个版本都是小批量交付的。
- 典型的 DevOps 工作流程
DevOps 工作流程可以分为 4 个阶段:
版本控制:存储和管理不同版本的源代码。
持续集成:该阶段使开发人员能够在进行单元测试和集成测试之前,构建组件、组装和验证它们。
持续交付:持续集成的下一步是,使发布和测试过程完全自动化。目标是快速、可持续地发布更新软件。
持续部署:在每个应用程序满足所有测试要求后,它会自动部署到生产环境中,以进行更小、更频繁的发布,无需任何人工干预。
15. DevOps 的核心操作是什么?
DevOps 的核心操作包括:
软件开发:
构建代码
代码覆盖率
单元测试
打包
部署
基础设施:
预置
配置
编排
部署
16. 团队在实施 DevOps 之前需要考虑哪些预防措施?
DevOps流程在实施之前应该采取一些预防措施,否则可能会降低组织的生产力:
DevOps 不是仅仅应用新工具、建立一个新的“部门”,实际上,DevOps 是一种不断发展的文化,其中开发和运维团队基于某个框架,共同协作处理整个应用程序生命周期。
企业有必要为其 DevOps 实践,构想出战略愿景。DevOps 计划会显著改变开发和运维团队之间的协作,因此,如果从一开始就按照明确的指导方针制定清晰的DevOps 路线图,就可以消除有歧义的沟通。
成功应用 DevOps 后,应在整个组织中推广持续学习和改进的文化。不断总结系统中可能存在的故障和问题,将其存储为团队的经验教训,以防止这些错误重复发生。
17. SCM 团队在 DevOps 中扮演什么角色?
软件配置管理 (SCM) 负责在软件开发生命周期中,系统地组织和管理变更的过程。
在 DevOps 中,SCM也是基于基础设施即代码的理论,它在简化开发人员的任务方面发挥着关键作用,因为他们可以自动保存每个配置过程的记录,这些记录现在以机器可读的形式自动复制和系统化。
- 质量保证 (QA) 团队在 DevOps 中扮演什么角色?
由于 DevOps 文化在创新组织中很容易被接受,因此 QA 团队在当今的自动化世界中的作用似乎较小。
然而,接受 DevOps 并不意味着 QA 职责的结束,而是意味着 QA 正在不同的工作环境中担任不同的角色,需要不同的专业知识。因此,他们当前的战略角色是构建强大的软件测试基础设施,同时跟上不断变化的趋势。
在 DevOps 方法中,QA 将与开发和运维团队的职责联系在一起,以确保持续交付的稳定性。
- DevOps 使用了哪些工具?描述你使用任何这些工具的经验。
在 DevOps 环境中,不同的工具能够支持产品开发的不同阶段。DevOps 最常用的工具可以分为 6 个关键阶段:
持续开发:Git、SVN、Mercurial、CVS、Jira
持续集成:Jenkins、Bamboo、Hudson
持续交付:Nexus、Archiva、Tomcat
持续部署:Puppet、Chef、Docker
持续监控:Splunk、ELK Stack、Nagios
持续测试:Selenium,Katalon Studio
20. DevOps 中如何管理变更?
变更管理计划需要通过 DevOps 来实施,可以将变更集中到一个平台,简化管理过程中的变更、问题和事件。然后,通过透明的标准,确保组织内部信息交换的协作和准确性。
- CI/CD 的一些核心组件是什么?
存储库管理工具作为版本控制系统起着关键作用,以确保 CI/CD流程的稳定,开发团队可以在构建软件的同时管理每一个更改。
在版本控制系统中,在一个项目中工作的不同开发人员进行开发,修复,而不会对所有团队成员造成任何干扰。
持续测试和自动化测试是形成完整的CI/CD生态系统的两种重要测试类型。自动化测试可以应用于产品开发的所有阶段(包括单元、集成和系统测试),以运行包括性能、可用性、负载、压力和安全在内的所有过程。
-
CI/CD 的一些常见做法是什么?
发展 DevOps 文化。
持续集成。
在每个环境中平等地实施。
失败后能够再次继续你的流水线。
版本控制。
记录你的持续交付实践。
保障 CD 流水线畅通无阻。 -
实施 DevOps会发生什么?
采用DevOps后,将会重塑软件开发文化,包括工作流程、组织结构到基础设施。因此,公司应该准备好应对执行 DevOps 产生的重大变化。 -
常见的 CI/CD 工具有哪些?
Visual Studio:可以将成熟的 DevOps 系统与敏捷开发、源代码控制、自动化测试和部署,以及监控相集成。
TeamCity:是一个构建管理和持续集成的服务器,它还支持统计测试覆盖率。
Jenkins:一个开源 CI 服务器,使开发和运维团队能够可靠地构建、测试和部署软件。它还可以与各种仪表板插件相关联。
GitLab:可以为用户提供高效的持续集成和部署,还支持轻松定制。GitLab 通过更快的代码传送、错误识别和功能恢复来帮助 CI/CD 团队缩短开发周期。
Bamboo:是一个持续集成服务器,可用于自动化管理产品的发布,还可以记录所有部署信息,并在整个持续交付流水线中实时提醒错误。 -
高效的持续集成工作流程是什么样的
包括以下关键步骤:
将项目的源代码合并到一个存储库中并进行维护。
自动化构建和集成。
自检。
定期更新对基线的更改
将所有提交添加到基线
快速构建
可以在准生产环境中运行测试
轻松获取最新的可交付成果
可以轻松地监控构建结果
自动化部署
26. 敏捷和 DevOps 之间的主要区别是什么?
简而言之,DevOps 与 Agile 相结合,可以更快地将软件功能部署到生产环境中。敏捷促进了在软件开发方面的协作,以及在复杂流程中高效地进行小型的快速发布。DevOps 是一种将开发和运维团队在沟通、集成和协作中聚集在一起的实践。
敏捷和 DevOps 相辅相成,形成了一个无缝的产品开发生命周期:敏捷原则构建并推动产品的创新,而 DevOps 应用工具来管理敏捷产品的交付。
- 持续集成、持续交付和持续部署之间有什么区别?
持续集成 (CI) 是一种每天多次将所有开发人员的所有代码合并到中央存储库的实践。这意味着自动测试新代码并快速检测和修复错误。
持续交付使 CI 更进一步,确保软件随时准备好进入生产环境。因此,CI 可以被视为持续交付必不可少的,它是 CI/CD 流水线的一个重要部分。
公司无需手动操作即可使用持续部署。每次代码通过测试后,都会自动发布到生产环境中。
持续集成、持续交付和持续部署是 DevOps 实施的关键阶段。
- 持续交付和持续部署之间有哪些根本区别?
持续交付监控中央存储库分支中发生的代码更改,这些更改将为部署做好准备,同时允许开发人员决定何时交付新的更改或功能。
其次,持续部署能够确保所有更新和错误修复从测试阶段自动部署到生产环境,无需人工干预。
29、持续集成和持续交付有什么区别?
持续集成可以确保软件组件之间的紧密关联,有助于代码提交得更频繁,并且可以连接多个开发人员的代码。
持续交付是 CI/CD 流水线中的进一步的步骤。代码不断合并到共享存储库中,然后不断进行测试。一旦代码构建完成,就会进行测试,以便提前检测到尽可能多的错误。
- DevOps 和持续交付有什么区别?
DevOps 是一种组织范式,它能够在开发和运维团队之间实现高效的协作和沟通。
同时,持续交付被认为是 DevOps 实施软件部署的最佳实践,有助于增强应用新版本的可靠性。
DevOps 的主要目标是有效地整合 Dev 和 Ops 角色,消除所有孤岛,并实现你自己在持续交付中独立的业务目标。借助持续交付加强协作并简化了组织的统一产品开发周期。
- 敏捷、精益 IT 和 DevOps 之间有什么区别?
敏捷旨在优化软件开发、构建持续交付、最小化反馈循环并在软件开发生命周期 (SDLC) 中促进团队协作。
精益 IT 是精益原则的延伸,用于简化产品开发周期。精益强调消除冗余工作流程以最大化整个产品的价值。
与此同时,DevOps 打破了软件开发过程中 Dev 和 Ops 团队之间的壁垒。它旨在实现自动化工具和 IT 专业人员之间有效合作,创建更简单的自动化流程。