DevOps 原理

1. 简述什么是 DevOps工作流程 ?

DevOps(Development和Operations的组合词)是一种重视"软件开发人员(Dev)"和"IT运维技术人员(Ops)"之间沟通合作的文化、运动或惯例。透过自动化"软件交付"和"架构变更"的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠

DevOps 是一套实践、工具和文化理念,可以实现软件开发团队和 IT 团队之间的流程自动化和集成。它强调团队赋能、跨团队沟通和协作以及技术自动化

在开发人员与运维人员产生分歧的时候,DevOps的出现解决了两者之间的矛盾。DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。在一个项目中需要各自不同的技术栈,一个bug可能会使整个项目出现问题,解决问题就需要进行拆分解耦,将项目拆成一个个小的服务单独部署。在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议

2. 简述DevOps 如何运作?

DevOps 团队包括开发人员和 IT 运营人员,他们在整个产品生命周期中进行协作,以提高软件部署的速度和质量。这是一种全新的工作方式,也是一种文化转型,对团队及其工作的组织具有重大影响。

在 DevOps 模式下,开发和运营团队不再是"孤立"的。有时,这两个团队会合并为一个团队,合并后工程师会参与整个应用生命周期中的工作(从开发和测试到部署和运营),并具备多学科的技能。

DevOps 团队使用工具实现流程自动化,并加速流程,这有助于提高可靠性。DevOps 工具链可帮助团队处理重要的 DevOps 基础事项,包括持续集成、持续交付、自动化和协作。

DevOps 的价值有时也会应用于开发团队以外的团队。当安全团队采用 DevOps 方法时,安全性则成为开发过程中一个活跃的组成部分。这就是所谓的 DevSecOps。

3. 简述DevOps 生命周期 ?

DevOps 的生命周期是能确保DevOps优化从提出到生产再到完整交付的整个开发流程的主要组成部分。DevOps主要用于电子商务网站、云本地应用程序和其他大型分布式平台的应用程序开发。它由多个阶段组成,这些阶段统称为DevOps生命周期:持续发展、持续集成、持续测试、持续反馈、持续监测、持续部署、持续运维。

1.持续开发

DevOps生命周期的第一个阶段是规划和软件编码。其中规划包括理解项目的远景,并基于这些远景设想软件。做规划不涉及任何主要工具,而维护代码需要使用一系列工具。 开发应用程序源代码的第一步是从不同的编程语言中进行选择。 JavaScript,C / C ++,Ruby和Python在DevOps中主要用于编码应用程序。

维护代码的过程称为源代码管理(SCM),其中使用了诸如Git、TFS、GitLab、Subversion等版本控制工具。

在SCM过程中,Git是支持分布式版本控制的首选工具。它通过循环的非线性工作流对数据保证做出贡献。对于涉及大量合作者参与开发活动的大型项目,Git通过提交消息在团队之间建立可靠的通信。

借助版本控制工具,可以在连续开发阶段构建应用程序代码的稳定版本。 开发人员还可以使用Garden,Maven和类似工具将代码打包为.exe(可执行)文件。

2.持续集成

源代码会被修改多次,这些频繁的更改每周甚至每天都在发生着。下一阶段的代码集成是整个DevOps生命周期的核心。在持续集成中,将构建支持附加功能的新代码,并将其集成到现有代码中。

在这个阶段,源代码中的错误会在早期就被检测到。为了生成为应用程序带来更多功能的新代码,开发人员运行用于单元测试、代码评审、集成测试、编译和打包的工具。 将新代码持续集成到现有源代码中有助于反映最终用户在使用更新后的代码时所经历的更改。

Jenkins是被广泛应用的可靠的DevOps工具,用于获取更新的源代码并将构建构建为.exe格式。 这些转换是无缝进行的,更新的代码将打包并进入下一阶段,即生产服务器或测试服务器。

3.持续测试

一些开发人员在持续集成阶段之前执行持续测试阶段。根据应用程序代码中的更新,可以围绕DevOps生命周期中的持续集成阶段重新定位此阶段。

在这个阶段,对开发的软件进行不断的Bug测试。 使用Docker容器来模拟测试环境。 通过自动化测试,开发人员可以节省往常在手动测试中浪费的精力和时间。 自动化测试生成的报告可改善测试评估过程,分析失败的测试用例变得更加容易。 经过UAT(用户接受测试)过程后,生成的测试套件更简单且没有Bug。

TestNG,Selenium和JUnit是用于自动化测试的一些DevOps工具。

这些工具还可以在预设的时间线上安排测试用例的执行。质量保证工程师(QA)可以使用这些工具对其他几个代码库进行并行测试。它确保了应用程序实现功能完美和网络互联。最后,被测试的代码被重新发送到持续集成阶段以更新源代码。

4.持续反馈

持续测试和持续集成是确保应用程序代码持续改进的两个关键阶段,而持续反馈是分析这些改进的阶段。

开发人员可以在最终产品上评估这些修改的结果。 最重要的是,测试这些应用程序的客户可以在此阶段分享他们的经验。 在大多数情况下,DevOps生命周期的这一阶段为应用程序开发过程提供了一个转折点。 及时评估反馈,开发人员开始着手进行新更改。 这样,客户反馈很快就能得到积极的回应,这为发布软件应用程序的新版本铺平了道路。

5.持续监测

监测应用程序的性能对于应用程序开发人员至关重要。 在此阶段,开发人员记录有关应用程序使用的数据,并持续监测着每个功能。 "服务器无法访问"或"内存不足"是可以在这个阶段被解决的一些常见系统错误。

持续监测有助于保持应用程序中服务的可用性。它还能确认重复出现的系统错误的威胁和根本原因。在这个阶段,安全问题可以得到解决,还能自动检测和修复缺陷。

与软件开发团队相比,IT运维团队在这一阶段的参与程度更高。他们的角色在监视用户活动、检查系统是否有异常行为以及跟踪错误的存在方面至关重要。

Sensu,ELK Stack,NewRelic,Splunk和Nagios是用于持续监视的关键DevOps工具。 这些工具可实现对系统、生产服务器和应用程序性能的全面控制。 在这些工具的帮助下,运维团队可以积极参与,以提高应用程序的可靠性和生产率。

当在此阶段检测到重大问题时,应用程序将在DevOps生命周期的所有早期阶段快速重新运行,这就是为何在这个阶段找到解决各种问题的方法会变得更快的原因。

6.持续部署

通常来说,持续部署阶段发生在持续监视之前。但是,开发人员要确保这个阶段在DevOps生命周期中始终处于活动状态,尤其是在应用程序上线并开始接收大量流量之后。

在此阶段,最终确定的应用程序代码将被部署到生产服务器。配置管理是这一阶段的关键过程,它在所有服务器上执行应用程序代码的精确部署,建立并管理应用程序性能和功能条件的一致性。将代码发布到服务器,为所有服务器安排更新,并且这些配置在整个生产过程中保持一致。

Ansible、Puppet和Chef是用于配置管理的一些有效的DevOps工具,它们经常执行新代码的快速和连续部署。

容器化工具用于通过配置管理过程实现连续部署。

Vagrant是一种容器化工具,可在从开发和测试到阶段和生产的不同环境中发展一致性。

同样,连续部署的可伸缩性由Docker等工具处理。这些工具通过复制和打包来自测试,登台和开发阶段的软件耦合,消除了各种生产故障和系统错误。

最终,该应用程序可以在不同的计算机上流畅运行。

7.持续运维

DevOps生命周期的最后一个阶段是最短且最简单的阶段。 持续运维的目的是使发布的应用程序和后续更新的过程自动化。 持续运维中的开发周期更短,从而使开发人员能够不断加快该应用程序的上市时间。

4. DevOps 工作联链的核心功能与模式 ?

培养 DevOps 文化需要使用新方法解决老问题。DevOps 需要改变编程人员编写应用代码并将其"扔"给部署和运营应用的运营团队的孤立流程。DevOps 方法要求开发和运营团队在项目的整个生命周期中协同工作。

持续集成和持续交付 (CI/CD) 通常被认为是 DevOps 文化的所必需的。第三个流程(即持续部署)为 Netflix 等大型组织所采用和推广,但大多数小型公司并未普遍采用(或要求采用)。这是因为在生产环境中持续部署新功能需要高度的自信,确信新代码已经过全面测试并且可以安全地部署(例如:在功能切换后)。因此,除非您的组织每天进行多次部署,否则对支持这种方法的流程进行投资可能并不值得。

多数情况下,进行一些"主干开发"将大大简化您的 CI/CD 工作。在此模型中,团队取消了长期存在的功能分支,并对代码的"主干"分支进行频繁提交。

主干开发的一个重要组成部分就是全面的自动化测试:单元测试、集成测试和回归测试。这有助于确保所有至主干分支的新提交在推送到存储库时都已经过彻底审查。

持续集成是将多个贡献者的代码变更自动集成到软件项目中的流程。这不局限于开发团队,还包括组织的其他部门。例如,产品团队可协调何时按顺序发布功能和修复,以及将由哪些团队成员负责。

持续交付是一种组织方法,它将设计、产品和营销等工程团队和非工程团队结合在一起,以便交付产品。没有 CD 的环境鼓励"各管一摊"的行为,即开发人员将 QA 团队视为主要的用户体验对象。这意味着存储库的"主干"分支始终处于"可部署"状态。

持续部署允许在进行代码变更时将其自动部署到生产环节,此类变更既可隐藏在功能标记后面,部署到一小部分客户中,也可/或是轻松回滚。如此一来,团队便可更灵活地响应不断变化的市场和客户需求,因为团队可以对客户反馈做出反应,并快速部署和验证新功能。他们还可以轻松回滚功能,使团队不会因为构建中断而受阻。

功能标记、功能切换或模糊部署是确保新应用功能在部署到生产环境中时无法呈现或不起作用的常见方法,且能非常轻松地开启。此战略支持持续部署,因为它几乎不会对用户造成不利影响。通常情况下,通过按地理位置对功能进行细分或运行单独的服务器实例,然后将功能只发布给一台用户可访问的服务器,可将功能限制在用户群的某一子集内。

5. 简述实施DevOps自动化的主要优势 ?

1 协作与信任

培养一种共同承担责任、具有透明度和更快进行反馈的文化是每个高绩效 DevOps 团队的基础。事实上,我们的"2020 年 DevOps 趋势调查"表明,协作和解决问题是成功的 DevOps 文化最重要的要素。

孤立工作的团队往往不遵守 DevOps 支持的系统思维。"系统思维"是指意识到您的行为不仅会影响您的团队,还会影响到参与发布流程的所有其他团队。缺乏可见性和共同的目标意味着,未制定依赖性规划、优先顺序不一致、相互指责,以及产生"不是我们的问题"心态,从而导致速度减慢和质量不合格。DevOps 是一种思维方式的改变,它强调从整体角度看待开发流程并打破开发和运营团队之间的障碍。

2 更快地发布和更明智地工作

速度决定一切。更频繁地实践 DevOps 发布可交付成功的团队具有更高的品质和稳定性。事实上,DORA 2019 年 DevOps 状况报告发现,精英团队的部署频率和速度分别是表现不佳团队的 208 倍和 106 倍。

缺乏自动化测试和审查周期会放缓从发布到生产的速度,而缓慢的事件响应速度则会降低速度并让团队丧失信心。不同的工具和流程会增加运营成本,导致上下文切换和发展势头受阻。然而,借助推动自动化和新流程的工具,团队可以提高工作效率以及更频繁地进行发布,同时减少问题的发生。

3 缩短解决时间

反馈循环最快的团队最具发展力。完全透明和无缝沟通能使 DevOps 团队最大限度缩短停机时间并更快解决问题。

如果未能快速解决关键问题,客户满意度将陡降。在缺少公开沟通的情况下,关键问题会产生缝隙,使团队之间弥漫着更强的紧张和沮丧情绪。公开沟通有助于开发和运营团队关注问题、修复突发事件并更快地解锁发布管道。

4 更好地管理计划外工作

计划外工作是每个团队所面临的现实,这是最常影响团队工作效率的一个现实问题。通过确定的流程和明确的优先级,开发和运营团队可在继续关注计划内工作的同时更好地管理计划外工作。

跨不同的团队转移和优先处理计划外工作不但低效,而且会分散现有工作。然而,通过更高的可见性和主动式回溯,团队可以更好地预测和共享计划外工作。

完全采用 DevOps 实践的团队能够以更智能、更快速的方式工作,并为客户提供更高质量。自动化和跨职能协作的普及可降低复杂性和减少错误,从而缩短发生事件和中断时的平均恢复时间 (MTTR)。

6. 实施 DevOps 的最佳实践 ?

1 敏捷项目管理

敏捷开发是一种项目管理和软件开发的迭代方法,可帮助团队更快地为客户创造价值,同时减少问题。敏捷开发团队专注于以较小的增量交付工作,而不是等到单个大规模发布日期来交付工作。持续评估需求、计划和结果,使团队能够对反馈做出响应并根据需要进行调整。

以下是敏捷开发项目管理的关键概念:

从四阶段工作流程开始:待办、进行中、代码审查和完成。了解有关工作流程的更多信息。

团队需要将大型项目分解为较小的任务,并在取得进展的同时对需求或范围的变更做出响应。了解有关如何使用长篇故事、故事和主题来确定工作范围和结构的更多信息。

如何计划、跟踪和衡量增量工作?Scrum 和看板是团队实践敏捷开发方法的核心框架。

2 ​​​​​​​使用 CI/CD 实现左移

当团队"左移"时,他们会尽早将测试引入代码开发流程中。在整个编码过程中执行各种测试,而不是将多项变更发送给单独的测试或 QA 团队,这样开发人员就可以在处理代码库的相关部分时修复缺陷或提高代码质量。持续集成和持续交付 (CI/CD) 以及部署的实践可巩固左移能力。

​​​​​​​3 使用适当工具进行构建

DevOps 工具链要求在 DevOps 生命周期的每个阶段使用适当的工具,并具备提高软件质量和交付速度的关键功能。了解有关如何选择 DevOps 工具和审查 DevOps 生命周期中每个阶段的功能的更多信息。

​​​​​​​4 实现自动化

持续集成和交付允许开发人员定期将代码合并到主存储库中。CI/CD 可自动执行该流程,即从在指定窗口中进行批处理到频繁提交,而不是手动检查代码。除了 CI/CD 之外,自动化测试对于 DevOps 实践的成功也至关重要。自动化测试可能包括端到端测试、单元测试、集成测试和性能测试。了解有关将自动化功能整合到软件开发流程中的更多信息。

​​​​​​​5 监控 DevOps 管道和应用

监控 DevOps 管道非常重要,借助它,构建中断或测试失败就不会造成不必要的延迟。自动化极大地提高了开发速度,但是如果自动化流程出现故障而且没人知道,那么最好手动完成这些工作。同样,监控生产应用至关重要,以便在客户反馈之前就识别出故障或性能缺陷。

​​​​​​​6 可观察性

随着行业从单一的本地系统和应用转向基于微服务的原生云应用,监控如今变得更加复杂。因此,人们对可观察性越来越感兴趣。人们常说,可观察性的三个支柱是日志、跟踪和指标。日志由大多数系统组件和应用生成,包含有关系统或应用运行的时间序列数据。跟踪则用于跟踪应用中的逻辑流程。指标包括 CPU/RAM 预留或使用情况、磁盘空间、网络连接等。可观察性只是意味着综合利用这三种信息来源对复杂系统的运行进行发现和预测,否则这将很难实现。了解有关可观察性的更多信息。

7 ​​​​​​​收集持续反馈

持续反馈可确保团队成员获得及时完成工作所需的所有信息。从开发角度来看,这意味着团队会立即收到所有管道故障的警报。同时,这也意味着开发人员能够尽快获得清晰、全面的代码测试结果。从产品管理角度来看,团队可以了解到任何生产故障或性能缺陷或报告的缺陷。过去,人们普遍认为开发团队只能在速度或质量方面进行优化。持续反馈是 DevOps 的要素之一,它可以实现速度和质量方面的优化。

​​​​​​​8 改变文化

DevOps 需要协作、透明度、信任和同理心。如果您的组织已经在少数具备这些品质的公司之列,那么您的团队应该能够非常轻松地采用 DevOps 实践。如果不在,则培养这些品质需要付出一些努力。最常见的组织结构是孤立的,这意味着不同团队有不同的所有权和责任范围,而且几乎没有跨团队沟通或协作。为了实现 DevOps 成功,必须通过采用"谁构建,谁运行"实践来消除这些障碍。这并不意味着没有专门的人员或团队,只是开放并实施了团队之间的沟通和协作渠道。

7. 使用DevOps有哪些重要的业务和技术优势?

DevOps为该表带来了很多业务和技术优势。 下面列出了一些最重要的参数:

1 商业利益

增强的操作环境稳定性

更快地交付功能

更多时间为产品增值

技术优势

2 持续交付软件

更快地解决问题

较小的复杂问题

8. 您能否列举一些最常用的DevOps工具?

以下是一些使用最广泛的DevOps工具的列表:

Ansible --配置管理和应用程序部署工具

Chef --配置管理和应用程序部署工具

Docker --容器化工具

Git --版本控制系统(VCS)工具

Jenkins --持续集成(CI)工具

Jira --敏捷的团队协作工具

Nagios --连续监控工具

Puppet --配置管理和应用程序部署工具

硒--连续测试(CT)工具

9. 简述什么是DevOps的反模式 ?

当其他组织通常采用的DevOps模式在特定上下文中不起作用而组织仍在继续使用它时,它将导致采用反模式。 换句话说,反模式是关于DevOps的神话。 一些著名的反模式是:

1 一个组织需要有一个单独的DevOps组

2 敏捷等于DevOps

3 DevOps是一个过程

4 DevOps是开发驱动的发布管理

5 由于组织独特,因此无法进行DevOps

6 无法进行DevOps,因为现有人员不适合

7 DevOps意味着开发人员管理生产

8 DevOps将解决所有问题

9 无法在正在进行的DevOps过渡中包含组织的所有方面

10 在DevOps过渡开始时未定义KPI

11 通过一个新的DevOps团队来减少与其他组织之间的隔离

10. 简述什么是DevOps的CI流程 ?

DevOps中的CI代表持续集成。CI是一种开发实践,开发人员可以在一天内多次将代码集成到共享存储库中。

开发和测试的持续集成提高了软件的质量,并减少了交付所需的总时间。

如果检查代码的团队成员遇到编译失败,则开发人员将破坏构建。 这样,其他开发人员如果不将编译错误引入自己的工作空间中,就无法与共享源代码存储库进行同步。

这破坏了协作和共享的开发过程。 因此,一旦配置项构建中断,立即识别并纠正问题就很重要。

通常,配置项流程包括每次编译成功时都会运行的一组单元测试,集成测试和回归测试。 如果上述任何测试失败,则CI构建被认为是不稳定的(这在开发正在进行中的敏捷冲刺中很常见)并且没有损坏。

11. 简述什么是DevOps中的左移 ?

当在纸上画图时,传统的软件开发生命周期有左右两边。 图的左侧包括设计和开发,而右侧包括生产阶段,压力测试和用户接受度。

在DevOps中向左移动仅意味着需要在右侧执行尽可能多的任务,即通常在应用程序开发过程的结尾发生,并将其纳入DevOps方法的早期阶段。

有几种方法可以完成DevOps中的操作,最值得注意的是:

在每个敏捷冲刺结束时创建准备就绪的工件

在每个版本中都包含静态代码分析例程

正确执行DevOps的级别直接取决于尽可能左移的程度。

12. 简述DevOps中的CAMS代表什么?

首字母缩写词CAMS通常用于描述DevOps方法论的核心信条。 它代表:

文化

断言

测量

共享

13. 请列举用于评估DevOps成功的几个KPI指标 ?

关键绩效指标是关键绩效指标的一种合同形式。 为了衡量DevOps流程的成功,可以使用几个KPI。 一些最受欢迎的是:

应用性能

应用程序的使用和流量

自动测试通过率

可用性

改变音量

客户票

缺陷逃逸率

部署频率

部署时间

错误率

部署失败

交货时间

检测时间(MTTD)

平均恢复时间(MTTR)

14. 简述实施DevOps自动化的主要好处 ?

以下是实现DevOps自动化的主要好处:

从CD方程式中消除人为错误的可能性(核心收益)

随着任务变得更加可预测和可重复,当出现问题时,很容易识别和纠正。 因此,它可以产生更可靠,更强大的系统

消除CI管道的瓶颈。 这会导致部署频率增加和失败的部署数量减少。 它们都是重要的DevOps KPI

15. 微服务是DevOps的核心部分。 您可以命名两个流行的Java开发框架来创建微服务吗?

有几种Java框架允许创建微服务。 但是,Eclipse MicroProfile和SpringCloud作为DevOps中用于创建微服务的两个主要Java开发框架而脱颖而出。

16. 简述对版本控制系统(VCS)了解什么? 定义其用途。

版本控制系统或VCS是一种能够记录一段时间内对一个文件或一组文件所做的更改的系统。Git和Mercurial是两个最受欢迎的版本控制系统。VCS的重要用途是:

检查什么引起了问题的最后修改

比较随着时间的变化

确定谁介绍了新问题以及什么时候提出的

将一个或多个文件还原到某个较早的状态

将整个项目还原到以前的状态

17. 简述什么是post mortem会议?

很多时候需要讨论在DevOps流程中出了什么问题。为此,安排了验后会议。这些会议产生了应该采取的步骤,以避免将来安排会议时遇到的相同或一组失败。

18. 陈述和解释连续测试的各个关键要素?

连续测试的各种关键要素包括:

1 高级分析--用于预测和预测未知的未来事件

2 策略分析--旨在改善测试过程的手段

3 需求可追溯性--指描述需求以及从需求的起源到部署的整个过程的能力

4 风险评估--识别可能造成潜在损害的危害和风险因素的方法或过程

5 服务虚拟化--允许使用虚拟服务代替生产服务。 仿真软件组件以进行 简单测试

6 测试优化--改善整体测试流程

19. 简述请从开发和基础结构方面说明DevOps的核心操作?

在开发和基础架构方面,DevOps的核心运营是:

1 应用程序开发--开发能够满足所有客户要求并提供卓越质量水平的产品

2 代码覆盖率--衡量在运行自动测试时执行的代码的块,线或弧的总数

3 代码开发--准备产品开发所需的代码库

4 配置--以最佳方式使用产品

5 部署--安装要由最终用户使用的软件

6 编排--安排一些自动化任务

7 打包--准备发布时涉及的活动

8 调配--确保基础结构更改随需要的代码及时到达

9 单元测试--测试单个单元或组件的方法

20. 简述什么是DevOps的CD流程 ?

持续交付 (CD) 与持续集成相集成,以向用户顺利交付产品。它旨在确保代码可以安全地部署到生产环境中。在 CD 环境中,无论是大型系统还是复杂的应用程序,新版本都可以立即按需执行,功能齐全,而且只需要极少的人工干预

21. 简述什么是DevOps的持续测试 CT ?

持续测试是一种软件测试技术,旨在使用自动化工具和流程在软件开发生命周期 (SDLC) 的早期并经常进行测试。它促进了不同团队之间更好的协作,并帮助他们了解确保每个软件版本的质量和可靠性的方法。

包括集成、回归、性能、系统、用户接受度、功能、安全等在内的各种测试在持续测试中自动执行。这些自动化测试可帮助团队接收即时反馈,以快速识别和缓解整个 SDLC 中的潜在漏洞或风险。

22. 简述持续测试与 DevOps 有什么关系?

CT 与 DevOps 的两个核心概念完美契合------持续开发和不间断反馈的来源。它能够无缝集成到 DevOps 的加速开发过程中。

由于 DevOps 包含开发、运营和 QA 团队之间的协作,因此持续测试使团队能够团结一致地工作。随着软件的持续开发和测试,以及快速错误修复的频繁反馈,公司可以轻松地将他们的开发流程与他们的业务需求保持一致。

组织可以显着提高软件交付的速度,因为软件中所做的更改可以在生产中快速设置。

23. 持续测试如何确保 DevOps 中更好的安全性?

持续测试通过使参与 SDLC 的不同团队能够在需要时在整个过程中做出贡献,从而确保整个 SDLC 的连续性。它还通过在 SDLC 流程的早期执行安全测试来将安全性转移到左侧,以随着开发的进展揭示应用程序中的潜在漏洞和安全弱点。

因此,每个成员都有责任维护安全,并且发展具有连续性。

此外,持续测试旨在从开发的初始阶段到发布的最后阶段对软件进行重复和自动化的安全测试。此外,Selenium 等工具有助于实现全面覆盖。

鉴于对有效代码相关风险管理的需求日益增长,安全测试是持续测试的一个组成部分。它通过及早检测潜在漏洞有助于确保应用程序的更好安全性。

持续测试还建立了一个支持系统,以确保应用程序的安全性免受意外攻击和更改的影响,这些攻击和更改也可能在部署后遇到。在加速开发过程中,例如在 DevOps 中,持续测试可确保系统在软件故障的情况下保持稳定和可恢复

24. 简述持续测试CT与自动化AT测试有何不同 ?

虽然持续测试由自动化测试组成,但它与自动化测试不同。持续测试和自动化测试是两个不同的概念,具有不同的目标。

自动化测试是一个过程,在此过程中您使用指定的自动化工具或软件来自动化一组任务。自动化测试的主要目标是执行重复的、相同的任务,机器可以更快地执行且错误更少。

持续测试是一种软件测试方法,专注于实现持续质量,同时识别潜在漏洞并解决它们。为了实现改进和持续质量的目标,它可以使用任意数量的工具和/或实践。

持续测试超越了测试自动化,需要各种实践,包括文化变革和工具,以帮助在 SDLC 早期检测和降低风险。然而,自动化测试使用软件来控制测试的执行,以实现各种不同任务的速度和数量。

两者都有各自的优势和挑战。最终,这取决于您的测试目的和要求。

25. 请简述型的 DevOps 工作流程 (简化核心流程 )?

DevOps 工作流程可以分为 4 个阶段:

1 版本控制:存储和管理不同版本的源代码。

2 持续集成:该阶段使开发人员能够在进行单元测试和集成测试之前,构建组件、组装和验证它们。

3 持续交付:持续集成的下一步是,使发布和测试过程完全自动化。目标是快速、可持续地发布更新软件。

4 持续部署:在每个应用程序满足所有测试要求后,它会自动部署到生产环境中,以进行更小、更频繁的发布,无需任何人工干预。

26. 团队在实施 DevOps 之前需要考虑哪些预防措施?

DevOps流程在实施之前应该采取一些预防措施,否则可能会降低组织的生产力:

1 DevOps 不是仅仅应用新工具、建立一个新的"部门",实际上,DevOps 是一种不断发展的文化,其中开发和运维团队基于某个框架,共同协作处理整个应用程序生命周期。

2 企业有必要为其 DevOps 实践,构想出战略愿景。DevOps 计划会显著改变开发和运维团队之间的协作,因此,如果从一开始就按照明确的指导方针制定清晰的DevOps 路线图,就可以消除有歧义的沟通。

3 成功应用 DevOps 后,应在整个组织中推广持续学习和改进的文化。不断总结系统中可能存在的故障和问题,将其存储为团队的经验教训,以防止这些错误重复发生。

27. SCM 团队在 DevOps 中扮演什么角色?

软件配置管理 (SCM) 负责在软件开发生命周期中,系统地组织和管理变更的过程。

在 DevOps 中,SCM也是基于基础设施即代码的理论,它在简化开发人员的任务方面发挥着关键作用,因为他们可以自动保存每个配置过程的记录,这些记录现在以机器可读的形式自动复制和系统化

28. 质量保证 (QA) 团队在 DevOps 中扮演什么角色?

由于 DevOps 文化在创新组织中很容易被接受,因此 QA 团队在当今的自动化世界中的作用似乎较小。

然而,接受 DevOps 并不意味着 QA 职责的结束,而是意味着 QA 正在不同的工作环境中担任不同的角色,需要不同的专业知识。因此,他们当前的战略角色是构建强大的软件测试基础设施,同时跟上不断变化的趋势。

在 DevOps 方法中,QA 将与开发和运维团队的职责联系在一起,以确保持续交付的稳定性

29. 简述DevOps 中如何管理变更?

变更管理计划需要通过 DevOps 来实施,可以将变更集中到一个平台,简化管理过程中的变更、问题和事件。然后,通过透明的标准,确保组织内部信息交换的协作和准确性

30. 请列举常见的 CI/CD 工具有哪些?

Visual Studio:可以将成熟的 DevOps 系统与敏捷开发、源代码控制、自动化测试和部署,以及监控相集成。

TeamCity:是一个构建管理和持续集成的服务器,它还支持统计测试覆盖率。

Jenkins:一个开源 CI 服务器,使开发和运维团队能够可靠地构建、测试和部署软件。它还可以与各种仪表板插件相关联。

GitLab:可以为用户提供高效的持续集成和部署,还支持轻松定制。GitLab 通过更快的代码传送、错误识别和功能恢复来帮助 CI/CD 团队缩短开发周期。

Bamboo:是一个持续集成服务器,可用于自动化管理产品的发布,还可以记录所有部署信息,并在整个持续交付流水线中实时提醒错误。

31. 简述高效的持续集成工作流程是什么样的?

包括以下关键步骤:

将项目的源代码合并到一个存储库中并进行维护。

自动化构建和集成。

自检。

定期更新对基线的更改

将所有提交添加到基线

快速构建

可以在准生产环境中运行测试

轻松获取最新的可交付成果

可以轻松地监控构建结果

自动化部署

32. 简述敏捷和 DevOps 之间的主要区别 ?

简而言之,DevOps 与 Agile 相结合,可以更快地将软件功能部署到生产环境中。敏捷促进了在软件开发方面的协作,以及在复杂流程中高效地进行小型的快速发布。DevOps 是一种将开发和运维团队在沟通、集成和协作中聚集在一起的实践。

敏捷和 DevOps 相辅相成,形成了一个无缝的产品开发生命周期:敏捷原则构建并推动产品的创新,而 DevOps 应用工具来管理敏捷产品的交付

33. 请简述持续集成、持续交付和持续部署之间有什么区别?

持续集成 (CI) 是一种每天多次将所有开发人员的所有代码合并到中央存储库的实践。这意味着自动测试新代码并快速检测和修复错误。

持续交付使 CI 更进一步,确保软件随时准备好进入生产环境。因此,CI 可以被视为持续交付必不可少的,它是 CI/CD 流水线的一个重要部分。

公司无需手动操作即可使用持续部署。每次代码通过测试后,都会自动发布到生产环境中。

持续集成、持续交付和持续部署是 DevOps 实施的关键阶段

34. 持续交付和持续部署之间有哪些根本区别?

持续交付监控中央存储库分支中发生的代码更改,这些更改将为部署做好准备,同时允许开发人员决定何时交付新的更改或功能。

其次,持续部署能够确保所有更新和错误修复从测试阶段自动部署到生产环境,无需人工干预

35. 简述持续集成和持续交付有什么区别?

持续集成可以确保软件组件之间的紧密关联,有助于代码提交得更频繁,并且可以连接多个开发人员的代码。

持续交付是 CI/CD 流水线中的进一步的步骤。代码不断合并到共享存储库中,然后不断进行测试。一旦代码构建完成,就会进行测试,以便提前检测到尽可能多的错误

36. 简述敏捷、精益 IT 和 DevOps 之间有什么区别?

敏捷旨在优化软件开发、构建持续交付、最小化反馈循环并在软件开发生命周期 (SDLC) 中促进团队协作。

精益 IT 是精益原则的延伸,用于简化产品开发周期。精益强调消除冗余工作流程以最大化整个产品的价值。

与此同时,DevOps 打破了软件开发过程中 Dev 和 Ops 团队之间的壁垒。它旨在实现自动化工具和 IT 专业人员之间有效合作,创建更简单的自动化流程。

37. 简述您认为合格的DevOps工程师将同时具备硬技能和软技能 ?

1 技术技能:DevOps工程师应该能够监督软件开发的各个方面。应聘者必须充分了解公司在该职位上出类拔萃所使用的所有相关工具和语言。

2 分析能力:分析能力可以帮助DevOps工程师理解复杂的情况,识别潜在的问题并开发有效的解决方案。对于DevOps工程师来说,这是一项至关重要的技能,因为它对于软件开发的故障排除过程非常重要。

3 解决问题:这项技能包括寻找创造性的方法来解决DevOps专业人士可能遇到的问题。这个专业人员扮演的最关键的角色之一是识别操作中的问题,并与开发人员合作创建解决方案。解决问题的技能帮助DevOps工程师快速确定解决方案,以确保公司的运营部门能够尽快恢复工作。

4 沟通:在许多职业中,包括DevOps,能够清楚地与他人进行口头和文本沟通是一项基本技能。DevOps工程师需要很强的沟通技巧,以便在公司的开发和运营部门之间交换信息。

5 时间管理:这项技能使个人能够确定责任的轻重缓急,并计划最有效的方式来完成任务,以确保他们首先完成最重要的任务。DevOps管理者通常有很多职责,因此有必要正确地划分它们的优先级。

38. 简述基于容器云的DevOps平台主要分哪几层 ?

1 基础设施层:包括IaaS,CaaS,我们分别是基于Kubernetes、Docker实现,上层有一层不同环境的适配,可以无缝对接私有云、公有云、混合云;

2 基础服务层:包括服务管理与调度的基础能力,如注册中心,编排,伸缩漂移;还有一堆具体的企业级或互联网式的云服务;

3 DevOps层:提供支撑全生命周期的多个领域系统更多的是工作流程(需求、设计、开发、测试、发布等)的串接,看板等文化的体现。

具备一键发布能力,通过DevOps平台,可以一键从源代码获得可访问的环境(自动根据应用的部署编排,实现了自动化的编译、集成、打包、部署、启动等)。

实施DevOps后的改变,首先团队变得更自治,成为使命型组织;沟通协作更顺畅;实现了开发人员的自助化服务;开发运维机器人提供更多的辅助功能。

39. 简述DevOps与Agile/SDLC有何不同 ?

敏捷是一套关于如何生产即开发软件的价值观和原则。例如:如果您有一些想法,并且希望将这些想法转化为可运行的软件,那么您可以使用敏捷价值观和原则来实现这一点。

但是,该软件可能只在开发人员的笔记本电脑或测试环境中工作。您需要一种快速、轻松、可重复地将软件以安全、简单的方式移动到生产基础架构中的方法。为此,您需要DevOps工具和技术。

你可以这样总结:敏捷软件开发方法论关注于软件的开发,而DevOps则负责以最安全、最可靠的方式开发和部署软件

40. 所有DevOps工具是如何协同工作的?

下面给出了一个通用的逻辑流程,其中所有内容都实现了自动化,以实现无缝交付。但是,根据要求,这种流程可能因组织而异。

1 开发人员开发代码,这些源代码由Git等版本控制系统工具管理。

2 开发人员将此代码发送到Git存储库,对代码所做的任何更改都将提交到此存储库。

3 Jenkins使用Git插件从存储库中提取这些代码,并使用Ant或Maven等工具进行构建。

4 配置管理工具,如puppet deploys&provisions测试环境,然后Jenkins在使用selenium等工具进行测试的测试环境中发布此代码。

5 测试完代码后,Jenkins将其发送到生产服务器上进行部署(甚至6 生产服务器也由puppet之类的工具进行配置和维护)。

部署之后,它会被Nagios之类的工具持续监控。

7 Docker容器提供测试环境来测试构建特性。

41. 简述持续集成的成功因素是什么?

这里您必须提到持续集成的需求。你可以在回答中包括以下几点:

1 维护代码存储库(Maintain a code repository)

2 自动化构建(Automate the build)

3 进行构建自检(Make the build self-testing)

4 每个人每天都致力于基线(Everyone commits to the baseline every day)

5 每个提交(到基线)都应该构建(Every commit (to baseline) should be built)

6 保持快速构建(eep the build fast)

在生产环境的克隆中测试(Test in a clone of the production environment)

7 使获得最新可交付成果变得容易(Make it easy to get the latest deliverables)

8 每个人都可以看到最新版本的结果(Everyone can see the results of the latest build)

9 自动化部署(Automate deployment)

42. 简述持续测试CT工具的关键要素是什么?

持续测试的关键要素是:

1 风险评估:它包括风险缓解任务、技术债务、质量评估和测试覆盖优化,以确保构建准备好进入下一阶段。

2 策略分析:它确保所有流程与组织不断发展的业务保持一致,并满足法规遵从性需求。

3 需求可追溯性:确保满足真实需求,不需要返工。对象评估用于确定哪些需求处于风险中、按预期工作或需要进一步验证。

4 高级分析:它在诸如静态代码分析、变更影响分析和范围评估/优先级划分等领域使用自动化,以首先防止缺陷,并在每次迭代中完成更多的工作。

5 测试优化:它确保测试产生准确的结果并提供可操作的结果。包括测试数据管理、测试优化管理和测试维护

6 服务虚拟化:它确保访问真实世界的测试环境。服务可视化允许访问所需测试阶段的虚拟形式,减少了测试环境设置和可用性的浪费时间。6

43. 解释DevOps中使用到的典型的角色 ?

  1. 开发运维工程师:
    在有机现象的鼎盛时期,权威都告诉了 DevOps 项目。此外,被称为平台工程师,DevOps 工程师是负责监督和支持用于 DevOps 操作的平台的人。
    DevOps 工程师职位的合格候选人在 DevOps 工作中较早,熟悉市场上的平台以及将它们集成到现有业务流程的方式,以及管理专业知识
  2. 建造工程师:
    构建工程师可能是 DevOps 社会控制职位,应归咎于事件组。这个人花时间管理构建和开发方法,并负责在极快节奏的氛围中保证构建目标和最后期限。他们管理代码、维护构建、生成新构建,并另外管理部署自动应答,确保构建满足既定的配置需求。
    他们有一个混合角色,具有不同技术角色的职责,如妻子设计师或配置经理。所有这些都适用于业务范围内的大量潜在客户,在该职位内具有很大的灵活性。
  3. DevOps 布道者:
    在市场上,已经有几家致力于 DevOps 生活方式的公司。这些公司在 DevOps 布道者的指导下进行平方衡量。职位持有人或顾问或助理工人。这个角色渴望权威,因为他们的目标是为 DevOps 实施开发一个想法、一个想法、一个概念或一个灵感
    }
    ,并说服那些人去责怪如果该计划得到执行,更高的生活会占多大比例。 DevOps 布道者是副分析师,应该在编译和呈现信息方面很明智。
  4. 发布经理:
    如果构建工程师在硬币的背面,则放电经理在正面。排放经理是负责监督总体发展的副监督和社会控制职位,他们因此建立工程师和不同的团队,以确保达到目标。

44. 质量保证(QA)团队在 DevOps 中扮演什么角色?

随着DevOps实践在创新组织中变得越来越受欢迎,QA团队的职责和相关性在当今的自动化世界中已显示出下降的迹象。

但是,这可以被认为是神话。 DevOps的增加并不等于QA角色的结束。 这仅意味着他们的工作环境和所需的专业知识正在发生变化。 因此,他们的主要重点是专业发展以跟上这种不断变化的趋势。

在DevOps中,质量保证团队在确保连续交付实践的稳定性以及执行自动重复性测试无法完成的探索性测试任务方面发挥战略作用。 他们在评估测试和检测最有价值的测试方面的见识仍然在缓解发布的最后步骤中的错误方面起着至关重要的作用

45. 常用的自动化管理软件有哪些 ?

ansible:不需要在被管控主机上安装任何客户端;无服务器端,使用时直接运行命令即可;基于模块工作,可使用任何语言开发模块;使用yam1语言定制剧本playbook;基于SSH工作;可实现多级指挥。轻量级,无需在客户端安装agent,更新时,只需要在操作机上进行一次更新即可.

saltstack:saltstack是一个配置管理系统,能够维护预定义状态的远程节点。saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。saltstack是运维人员提高工作效率、规范业务配置与操作的利器。

puppet:puppet是一个IT基础设施自动化管理工具,它能够帮助系统管理员管理基础设施的整个生命周期: 供应(provisioning)、配置(configuration)、联动(orchestration)及报告(reporting)。基于puppet ,可实现自动化重复任务、快速部署关键性应用以及在本地或云端完成主动管理变更和快速扩展架构规模

**Kubernetes: **跨主机编排容器。更充分地利用硬件资源来最大化地满足企业应用的需求。控制与自动化应用的部署与升级。为有状态的应用程序挂载和添加存储器。线上扩展或裁剪容器化应用程序与它们的资源。声明式的容器管理,保证所部署的应用按照我们部署的方式运作。通过自动布局、自动重启、自动复制、自动伸缩实现应用的状态检查与自我修复。

46. 请列举DevOPS的运维常用的工具链 ?

代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion

构建工具:Ant、Gradle、maven

自动部署:Capistrano、CodeDeploy

持续集成(CI):Bamboo、Hudson、Jenkins

配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail

容器:Docker、LXC、第三方厂商如AWS

编排:Kubernetes、Core、Apache Mesos、DC/OS

服务注册与发现:Zookeeper、etcd、Consul

脚本语言:python、ruby、shell

日志管理:ELK、Logentries

系统监控:Datadog、Graphite、Icinga、Nagios

性能监控:AppDynamics、New Relic、Splunk

压力测试:JMeter、Blaze Meter、loader.io

预警:PagerDuty、pingdom、厂商自带如AWS SNS

HTTP加速器:Varnish

消息总线:ActiveMQ、SQS

应用服务器:Tomcat、JBoss

Web服务器:Apache、Nginx、IIS

数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库

项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker

相关推荐
NiNg_1_23426 分钟前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行31 分钟前
Linux安装Docker以及Docker入门操作
运维·docker·容器
小江湖199437 分钟前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
gopher95111 小时前
linux驱动开发-中断子系统
linux·运维·驱动开发
吃面不喝汤662 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
Rookie_explorers2 小时前
Linux下go环境安装、环境配置并执行第一个go程序
linux·运维·golang
学习向前冲2 小时前
AD域控服务器
运维·服务器
hgdlip2 小时前
查看ip地址的方法有几种?探索多样方法
运维·服务器·ip地址
极小狐2 小时前
Ruby-SAML CVE-2024-45409 漏洞解决方案
gitlab·devsecops·devops·极狐gitlab·安全合规
丶21362 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker