[DevOps|DevSecOps|ChatOps|GitOps]理论部分学习

root
233
文章
0
评论
2021年9月2日22:48:42 评论 4867字阅读16分13秒

[DevOps|DevSecOps|ChatOps|GitOps]理论部分学习

DevOps方法论

  • 目标: 我们只有掌握了DevOps方法论的相关知识,才能够通过技术工具等手段实现。DevOps方法论是我们在进行DevOps实践时必须掌握的原则类知识。

什么是DevOps?

DevOps是一种思维方式,同时也是一组工作实践。成功的DevOps是将人、过程和工具相互融合。DevOps并不是简单的理解为自动化工具。DevOps 一词是由“开发”和“运营”这两个词组合而成的,是一种文化转变,在开发团队与运维团队架起了桥梁(一般开发团队与运维团队形成孤岛、隐形的墙)。

DevOps通常被理解为流程和工具的组合,可促进软件工程和基础架构团队之间的持续协作。反过来,这些功能可自动在整个组织中快速可靠地交付应用程序和服务。DevOps包括多个重点领域,包括自动配置持续集成持续监视测试驱动的开发。

什么是CI/CD?

持续集成 (CI)

  • 合并开发人员正在开发编写的所有代码的一种做法。
  • 通常一天内进行多次合并和提交代码。
  • 从存储库或生产环境中进行构建和自动化测试,以确保没有集成问题并及早发现任何问题。
持续交付(CD)
  • 可以通过将更改自动推送到发布系统,随时将软件发布到生产环境中。
  • 持续部署 会更进一步,并自动将更改推送到生产中。

实施DevOps应避免的问题

  • 避免无序交付: 错误的代码配置可能会交付给生产环境,而没有对其影响进行充分的探索,从而使前方的自动化测试丧失价值。手动确认仍然至关重要必须有一个预生产阶段(生产之前的部署和测试环境),该阶段允许开发人员纠正将代码直接推送到生产中时用户可能会遇到的错误。
  • 对DevOps误解认为DevOps工程师的目标是解决与DevOps相关的所有问题
  • 速度胜于质量急于在较短的时间内完成并完成尽可能多的DevOps项目,以保持其在竞争激烈的市场中的地位。这听起来似乎是个好主意,但是期望DevOps快速发展可能会带来更多的痛苦而不是收获。
  • 组建一支专门的DevOps团队最好由QA,ops和dev的新团队成员和现有员工组成。后者拥有大量的知识,这些知识在您实施如此庞大的计划时非常有价值。

实施CI/CD流水线

DevOps有效地结合了开发,运营和IT服务团队之间的鸿沟。为了培养DevOps文化,使用正确的DevOps流程实施正确的DevOps工具至关重要。持续集成/持续交付/持续部署(CI/CD/CD)帮助开发人员和测试人员在结构化环境中更快,更安全地发布软件

与传统软件生命周期不同,CI/CD实施过程每周或每天更新一次,而不是每月或每季度更新一次。有趣的是,客户甚至不会意识到更新是实时发生的。 

  • 持续集成 CI是开发人员每天多次将新代码集成到制品库中的过程这是比传统方法更好的方法,在传统方法中,开发人员将隔离构建新代码,然后在项目生命周期结束时将其集成到主存储库中。主要目标是在初始阶段检测到任何集成错误,以便可以迅速对其进行纠正。每当新代码与现有主存储库合并时,它将触发新的构建。针对这些新版本执行测试运行以检查是否有破损。
  • 持续交付 CD确保自动执行软件交付过程,并保障将集成代码交付到生产阶段,而不会造成任何错误或延迟。DevOps实施过程中的CD 可帮助开发人员一致地将新代码与主分支合并,以便他们可以构建即时软件就绪的产品。它负责检查代码的质量,并执行测试以检查它是否可以将功能构建释放到生产环境中。
  • 持续部署自动化的最关键部分发生在交付管道的此阶段。只要代码中有重要更改,相应的构建和部署就会同时发生。它是通过连续部署过程实现的,该过程允许对通过CI阶段的每个代码修改执行实时部署更改。在此阶段,从初始代码开始直到代码进入生产阶段,都无需进行人工干预。

实施CI/CD好处

最终目标:比以往更快地交付给客户

1.通过CI工具获得更快的反馈

对于每个提交的代码,将同时运行相应的测试,以避免在以后的阶段出现任何链接断开的情况。更快的反馈有助于检查代码的质量和影响。

2.运行过程更高的可视性

通过CI / CD管道设置,可以分析新版本的整个过程,测试结果以及新版本的任何问题。这种透明性使开发人员可以知道构建中的哪些更改影响了业务,并避免了将来发生此类变化。

3.尽快尽早地错误检测

进行各种类型的自动化测试可以在早期发现任何错误问题,而不会产生任何最后的惊喜。这些自动化测试以及很少的手动测试运行,有助于解决可能出现的任何问题。

  • 每次更改都可发布
  • 降低每次发布风险
  • 更加频繁交付价值

前期手动更加安全,后期自动流水线调试好了以后,自动更加安全

CI/CD管道阶段

本地开发阶段: 本地验证。

提交阶段(commit):在这个阶段会将新特性或者新的代码集成,质量平台帮助获得代码质量检查反馈,CICD工具将帮助执行一系列的单元测试和其他有效的测试。例如:Jenkins提供了各种工具和界面,可帮助自动完成整个软件周期。

构建阶段(build):首先代码已经集成并测试通过,接下来此阶段完成构建打包。在这个阶段会将开发人员生成的制品上传到制品仓库。例如:docker工具用于创建服务器并将工件部署到制品库中,以便可以进行测试。 (业务/项目a/服务/version/xxxx.jar)

测试阶段(test):alpha 和 beta部署在此测试阶段进行,开发人员可以在Alpha部署中检查其新版本的性能以及这些版本之间的相互作用。在beta部署阶段,将进行手动测试,这将在移入生产之前再次检查应用程序是否正常运行。

生产发布(production deployment):这是应用程序上线的第四个也是最后一个阶段,一旦构建成功通过了所有测试方案,就可以将其部署到生产阶段以供最终用户使用。

DevSecOps

DevOps和DevSecOps区别

DevOps是指开发,测试和运营团队之间的协作环境,以实现持续交付,而DevSecOps涉及将安全组件集成到DevOps流程中DevSecOps专注于解决DevOps Automation安全问题,例如配置管理,组件分析[代码里有没有敏感信息之类的]等

DevSecOps到底是什么?

作为DevOps思维方式的扩展,DevSecOps将安全控件和流程嵌入到DevOps工作流程中,并自动执行核心安全任务。这些安全性原则是在开发过程的早期引入的,并在整个开发生命周期中得到实施。

除了为DevOps团队提供安全知识和实践外,DevSecOps还将应用程序开发知识和流程整合到安全团队中,以实现团队之间的高效协作。在IT领域中,关于DevSecOps一词的用法没有一致意见,DevSecOps一词有时被称为DevOpsSecSecDevOpsRugged DevOps

DevSecOps方法主要组成:

实际的DevSecOps方法需要考虑六个主要组成部分。这些包括:

  • 代码分析: 通过小部分代码交付,快速识别漏洞。
  • 变更管理提交高速度和高效率的变更,确定变更的影响是正面还是负面【类似于你写了条sql执行给你反馈信息】
  • 监视合规性:组织应遵守一些合规性法规等等,并随时准备由监管机构进行审核。
  • 识别威胁:代码更新都会伴随潜在的新威胁。尽早识别这些威胁并立即做出反应。
  • 漏洞评估:涉及对新漏洞的分析以及对新漏洞的响应。
  • 培训: 组织需要让他们的软件IT工程师参与安全性相关的培训,并为他们配备确定例程的准则。

DevSecOps工具

DevSecOps的采用涉及评估应用程序安全风险和代码测试,而专用工具是必不可少的。集成开发环境(IDE)中自动测试工具的使用使开发人员能够将安全性纳入DevOps工作流程中,而无需每次都启动新的环境来测试代码。

已经开发了多种工具来促进DevSecOps实施的各个方面。这些包括:

  • 可视化工具 KibanaGrafana之类的工具可帮助识别,发展安全信息并与操作共享。
  • 自动化工具每当发现安全缺陷时,StackStorm之类的工具都可以帮助提供脚本化的补救措施。
  • 搜寻工具这些工具有助于检测安全异常。一些示例包括Mirador,OSSEC,MozDef和GRR等。
  • 测试工具测试是DevSecOps的关键要素,为此目的使用了广泛的工具,例如GauntIt,Spyk,Chef Inspec,Hakiri,Infer和Lynis。
  • 警报工具: Elastalert,Alerta和411等工具会在发现需要修复的安全缺陷时提供警报和通知。
  • 威胁情报工具这些工具可捕获和整理威胁情报,包括OpenTPX,关键堆栈和被动总计。
  • 攻击建模工具这些有助于实施攻击建模和安全防御。

如何实现DevSecOps?

DevSecOps通过在代码级别合并安全性,将它们组合为一个简化的流程,从而确保了流程链所有级别的应用程序和过程的安全。

成功实现DevSecOps的五个功能:

  • 每个阶段的强制性安全
  • 安全前进行彻底评估
  • 在代码级别进行与安全相关的更改
  • 自动化所有可能的过程
  • 通过警报和仪表板进行持续监控

 

ChatOps

实施ChatOps是一种现代工作方式,它将人员,工具和聊天结合在一起,以提高生产力并帮助企业更快地发展。

在ChatOps上运行的组织将自动监视和系统解析与人工监督和分析相结合,以最大程度地提高正常运行时间和效率。ChatOps奖励组织提高效率,自动化和创新的能力,更高的可靠性,更快的事件响应时间以及数千小时的生产率节省。

GitOps

GitOps提供了一种自动化的管理基础架构的方法。它通过使用许多团队已经使用的DevOps最佳实践来做到这一点,例如版本控制,代码审查和CI/CD管道。

由于DevOps具有提高生产力和软件质量的巨大潜力,因此非常多的公司一直在采用它。在此过程中,我们找到了使软件开发生命周期自动化的方法。但是,当涉及到基础架构的设置和部署时,它仍然主要是手动过程。

借助GitOps,团队可以自动化基础架构的配置过程。这是由于可以使用声明文件将基础结构编写为代码(IaC)。我们可以将它们存储在Git存储库中,就像存储应用程序开发代码一样。

传统应用发布模式

目的: 找到传统发布存在的问题,如何改进。

一般一个开发团队中都会存在多个角色:开发、测试、运维。当时我们的应用发布模式可以能是这样的:

  • 开发同学进行项目代码开发,本地运行测试成功后将代码上传到版本控制系统
  • 开发同学通知运维同学项目可以发布了,然后运维同学下载代码进行打包和构建,生成应用制品
  • 运维同学使用部署脚本将生成的制品部署到测试环境,并提示测试同学可以进行产品的测试。
  • 测试同学开始进行手动、自动化测试,测试完成后提醒运维同学可以进行预生产环境部署
  • 运维同学开始进行预生产环境部署,然后测试同学进行测试,测试完成后,开始部署生产环境

问题:

手动操作很多、出现的问题很多。上面看似很流畅的过程,其实每次构建或发布都可能会出现问题。未对每次提交验证、构建环境不一致:开发人员本地测试成功后提交代码,运维同学下载代码进行编译却出现了错误。

工具选择

Jenkins

  • Jenkins 是一个广泛用于持续集成的可视化 web 自动化工具。
  • 可以很好的支持各种语言的项目构建。
  • 完全兼容ant、maven、gradle等多种第三方构建工具。
  • 同时跟svn、git能无缝集成。
  • 也支持github、bitbucket直接集成。
  • 而且插件众多,在这么多年的技术积累之后,在国内大部分公司都有使用Jenkins

GitLabCI/CD

  • GitLab-CI是gitlab8.0之后自带的一个持续集成系统,中心思想是当每一次push到gitlab的时候,都会触发一次脚本执行,然后脚本的内容包括了测试,编译,部署等一系列自定义的内容。
  • GitLab-CI的脚本执行,需要自定义安装对应gitlab-runner来执行,代码push之后,webhook检测到代码变化,就会触发gitlab-CI,分配到各个Runner来运行相应的脚本script。这些脚本有的是测试项目用的,有的是部署用的。

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年9月2日22:48:42
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Jenkins的Pipeline项目 Devops

Jenkins的Pipeline项目

Pipeline项目 CI/CD持续集成/持续部署 持续集成是一种软件开发实践,团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能发生多次集成。每次集成都通过自动化的构建...
jeesns项目代码部署and自动上线 Devops

jeesns项目代码部署and自动上线

jeesns项目代码自动上线 经过上一次失败的教训,这一次通过学习了maven项目管理工具,肯定能部署成功的。失败案例jeesns项目上线(失败案例),这对java项目的部署是一次很好的学习 Jenk...
maven工具,搭建私服nexus Devops

maven工具,搭建私服nexus

maven项目管理工具 Maven是一个项目管理的综合工具。Maven提供给开发人员构建一个完整的生命周期框架。 开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: