DevOps is Hard、DevSecOps is Even Harder


Enterprise Holdings. 的IT团队超过2000人,在2018年的演讲中介绍了Enterprise Holdings的DevOps是如何转型的。我们通过打造一个不只包涵了pipeline的CI/CD平台,将其称之为SDLC。在最开始的200+个应用中,我们挑选出5个来作为试点。当时的情况证明这次DevOps转型计划是成功的,我们的团队有4+位工程师和两位架构师,从2年半前就开始了整个平台的开发工作,根据业务需求确保平台可以适配各种云服务、也要适配已有的中间件,我们也在不断对CI/CD平台进行改进,以适应所有业务场景。其的目标是让开发人员更专注于具体的项目开发,让工具去解决一些通用性的问题。为了达到目前的效果,我们做了很多关于平台的需求收集及问题反馈相关的运营工作,所以在过去的一年里,我们已经将此套平台服务于70%的应用中,并且这个数字还在持续的增加。
在DevOps转型过程中,我们的角色并不是软件的开发者,但我们支撑了应用开发团队和他们所开发的应用,我们的服务工作介于应用程序与基础设施之间。在我们的角度来看,应用程序的开发应该是这样的:

  • 开发人员在本地开发
  • 在仓库中检查源码
  • 在构建服务器上构建应用
  • 运行安全扫描
  • 打包发布到JFrog的Artifactory
  • 发布应用到不同的环境测试
  • 所有测试结束后,发布到生产环境

这个模式很简单,但是也很高效,但是为了实现这个流程做了非常多的事,我们开发了一些被称之为共享库的模版,并将此和打包程序、自动化脚本、ansible脚本等一起存储到源码仓库中进行版本管理,同时提供给应用团队去使用。为了支撑我们的应用团队按上述流程实践,我们使用了很多工具。
持续集成工具链包括:git、maven、gradle、Artifactory、Bitbucket、BlackDuck、jenkins
持续交付工具包括:Ansible、jenkins、Bitbucket、Artifactory、Oracle、Tomcat等

工具使用简单,所以就会有人告诉你DevOps是简单的,但这种说法是不负责任的,不能认为使用了某个工具,我们就实践了整个DevOps理念。我们公司的it团队由超过2000人组成,这些人开发了大量的应用程序,我们要保证整个团队都能正常的工作。虽然每个团队使用的技术栈不同,使用的平台不同,但我们需要找到这些人的共同点,以便在我们的DevOps平台上更好的适配所有团队和开发者以及超过200个的应用。我们需要保证所有人都能应用我们的平台,并且保障平台实时可用,为此我们在jenkins的上面使用groovy开发了很多pipeline模版、自动化脚本、jenkinsfile等供其他团队使用。这样我们就能引导开发人员使用工具的时候是按照我们指引的方式去使用的,并且在这个过程中我们设置了很多关卡,明确告诉了开发人员如果进行这些校验、他们的应用程序是无法正常的被构建的。这样的结果就是,开发人员使用我们定义好的模版,自动进行安全扫描,收集元数据,并把应用包上传到Artifactory中统一管理。之后我们的团队就可以通过这些元数据所收集的结果,去反查到你的应用程序包括什么。我们在模版中维护了一个json串,告诉你这个模版会做什么事、收集什么数据。
上面都是说的CI的内容,接下来我们讨论下CD。很遗憾,到目前为止我们仍然没有办法将所有的CD流程自动化,我们有太多的开发场景和平台,有大量复杂的工作等着我们去做。在我们的CD体系中ansible负责了大量的工作,我们使用jenkins去管理我们的发布流程、并通过ansible去执行发布任务,最重要的是,我们收集了部署中的数据(如发布的环境、发布的时间、测试的结果等等),并把这些数据以元数据的方式回写到Artifactory中。在这个过程中你需要定制开发一些自动化的测试脚本,并把他们应用到pipeline中。

我们的构建任务运行在一个jenkins中、测试任务运行在另一个jenkins里,这样的方式保证我们的应用有一点点安全性。
在部署过程中我们存在的最大的一个问题就是,每次部署不仅仅部署一个应用,可能会涉及到很多应用同时发布,我们为了处理这个问题,让应用运维团队去梳理了应用程序间的依赖关系,以及部署的顺序。并且维护了一个清单来对整个发布进行说明。Jenkins会按照这些事先定义好的清单来进行发布 ,并收集到过程中的问题、哪个stage失败、是否影响到了其他的任务等等。并把这些问题同步到pipeline中以及Artifactory的元数据上。我们给了所有开发者对jenkins的只读权限,这样可以确保所有的相关开发者都可以看到这些问题,并及时对问题进行修复。我们通过这种方式,把一次发布由4小时缩减到1小时。

那么接下来,我们要保障的就是每个人都按照这个标准去执行就可以了

接下来我们谈论一些安全的话题
安全是我们组织中非常重要的一部分,实施起来也有很多困难。在我们缺乏安全意识的时候,我们都使用普通用户。这些普通用户,实际上拥有这些流程运行的权限。应用程序的团队甚至可以随意去使用有漏洞的组件,每当我们检查到这些问题的时候,往往这些问题已经被引入到测试环境和生产环境了,我们需要使用到很多开源软件,但是引入这些开源软件需要花费至少一个月的时间去评估它的安全问题是否会对我们的应用程序带来影响,这样的流程是与敏捷开发模式不符合的。

每一天都有非常多的漏洞被提交到公网上,所以我们希望我们的安全问题不应该仅仅由安全团队负责,开发、测试、运维团队的所有工程师都应该对安全重视起来,所以我们选择把安全扫描放到我们的CI/CD流水线里。我们强制所有应用流水线中必须增加安全扫描,如果没有这个stage,那么这条流水线是无法通过的。虽然开始的时候大家不愿意接受,但是过了一段时间,开发人员发现安全团队找他们修复漏洞的这种事变得越来越少,大家也就慢慢常态化了安全扫描这个步骤。这样安全团队也将专心的把时间花费在研究漏洞对应用程序的影响上,减少了与开发团队测试团队的沟通成本。另外我们制定了流水线安全的SLA,来定义一个构建的所有依赖是否满足上线需求。在这个过程也不是完全顺利的,我们发现每条流水线里都进行安全扫描非常花费时间和资源,所以我们改进了方案,每次扫描只扫描一些新的依赖、组件以及新的漏洞特征,这样也大大的提高了安全扫描的效率。
未来工作中,我们会继续与我们所有支持的团队保持持续的沟通,我们要随时了解支持的团队的所有想法和产品,结合实际情况,向他们展示我们的CICD平台是如何给他们带来收益的,确保最终每个团队都可以采用我们的最佳实践,主动来接入我们的平台。总结来说,你所知道完整的CI CD应该是这样的,它不仅是开发,不仅是安全,更是运维、测试。所以pipeline基本等同于一切。我们真的想确保我们所有的过程的设计是安全的,这是我们团队每个人的目标,我们真正专注于在基础设施团队内部全面整合。整合内容包括服务器环境、网络、技术栈等等,而实际上这些整合都是依赖于我们的CICD平台建设的。

**更多技术分享请关注 JFrog杰蛙在线课堂
1月14日在线课堂:《JFrog免费社区版容器镜像仓库JCR—功能介绍及实践》
课堂收益:

  1. 了解JCR的优良特性和强大能力
    2.通过示例演示,掌握如何利用JCR更好地支持微服务及Kubernetes应用的开发和部署

报名链接:https://www.bagevent.com/event/6334008

抽奖活动:
课堂结束前五分钟,进行抽奖活动
第一名:小爱音箱
第二名:JFrog杰蛙新版T恤
第三名:JFrog杰蛙新版T恤
**

原文地址:https://blog.51cto.com/jfrogchina/2466376

时间: 2024-10-15 10:13:12

DevOps is Hard、DevSecOps is Even Harder的相关文章

为 DevOps 提供专业级、全栈式性能监控服务

相信大家都清楚,深谙 DevOps 的公司做起事情来更加高效.相较于竞争对手而言,他们的代码重用率更高,错误率更低.但是,成功取决于多种因素,其中就包括:是否能够准确监控应用在不同环境下(可能是多语言环境)的所有变化.所以,运维团队还需要一个支持连续开发与测试的软件分析方案,同时加强与其他部门的协作.沟通. 国内应用性能管理领军企业 OneAPM 提供的数据既能检测和监控开发团队提交的新性能,也能确保运维的稳定性.作为一家 DevOps 为导向的公司,OneAPM 完全理解软件团队所面临的诸多挑

如何利用Azure DevOps快速实现自动化构建、测试、打包及部署

前两天有朋友问我,微软的Azure好用吗,适不适合国人的使用习惯,我就跟他讲了下,Azue很好用,这也是为什么微软云营收一直涨涨涨的原因,基本可以再1个小时内实现自动化构建.打包以及部署到Azure服务器上.利用周末的时间,写了这篇文章,分享给大家,希望能帮助一些人快速入手如何使用Azure DevOps自动化构建.测试以及部署自己的服务. 今天,我给大家一步一步详细介绍,如何在1个小时内,创建一个Web API项目,实现服务的自动化构建.打包,并自动化部署到Azure上. 1. 创建一个Azu

DevOps开源工具的三种分类整理

原文地址:http://www.360doc.com/content/16/0322/07/31263000_544210096.shtml 随着开发运维一体化的DevOps运动在国内外蓬勃发展,DevOps相关工具也呈现热闹趋势,在这个言必谈如何实施落地引入工具.建设平台的大环境下,我们今天也来盘点一下DevOps相关工具. 先来看一下业界对DevOps工具的各种分类介绍. 一.DevOps应用交付工具链   ElasticBox是国外一个云应用管理工具,主要用于实现云应用生命周期的可视化管理

为什么要DevOps?

Boss:「项目经常延期」「做东西太慢」 产品: 「老板的想法总变」 「事情太多,忙成狗」 「开发说这个实现不了」 开发: 「需求总变」 「UI 方案给的太晚」 「活儿太多」 测试: 「需求变了没提前通知」 「测试时间总被压缩,还要背锅」 「重复测试太多遍」 运维: 「每天这么多版本上线,活干不完,出事儿第一个背锅.」 上面的这些问题在做互联网应用时,我们都深有体会.为什么说是互联网应用,而不是传统的IT软件?传统IT软件在研发时,更多的是项目型或者产品型的,其发布频率或者需求变化的频率是相对较

肖俊:HPE IT 的DevOps 实践分享

本篇文章来自于HPE和msup共同举办的技术开放日HPE测试技术总监肖俊的分享,由壹佰案例整理编辑. 一.DevOps含义解析 这是DevOps的趋势图.DevOps这个概念大概是在2009年被提出来的,2010年有一些公司开始试点,之后DevOps的热度持续增加,这是我们在谷歌搜索DevOps关键字得到的搜索量,这条曲线表示了DevOps热度呈指数级增长.因此我预计2016年DevOps仍然会成为一个非常受关注的技术. 什么是DevOps? 我们在试点DevOps的时候做了很多研究,也在网上做

N个免费DevOps开源工具,没用过,至少应该了解!

文/华为eSDK 在介绍Devops工具之前,先跟随码花来了解下:Devops是个啥? Devops=[Development]+[Operations]. 简言之,Devops主要用于开发.测试.运维之间的沟通.协作与整合,减少开发和运营之间的摩擦,从而快速部署软件或应用程序,并且可以快速检测. 作为小白,你可能就要问了:那,Devops到底是个什么样的存在形式,是个软件还是啥? 错!!!Devops既不是软件.也不是网站.更不是代码,而是一组方法.过程与系统的统称. Devops包含了很多优

DevOps详解

最近我阅读了很多有关DevOps的文章,其中一些非常有趣,然而一些内容也很欠考虑.貌似很多人越来越坚定地在DevOps与chef.puppet或Docker容器的熟练运用方面划了等号.对此我有不同看法.DevOps的范畴远远超过puppet或Docker等工具. 这样的看法甚至让我感觉有些气愤.DevOps在我看来极为重要,过去15年来,我一直在大型机构,主要是大型金融机构中从事工程业务.DevOps是一种非常重要的方法论,该方法将解决一些最大型问题的基本原则和实践恰如其分地融为一体,很好地解决

环境安装、配置django

环境安装 以下的环境版本1.vagrant_2.1.5_x86_64.msi2.VirtualBox-5.1.0-108711-Win.exe3.centos-7.2.box 安装VirtualBox版本:VirtualBox-5.1.0-108711-Win 1. 2. 3. 4. 5. 6. 7. 安装vagrant版本:vagrant_2.1.0_x86_64 1. 2. 3. 4. 5.重启下电脑 6.验证 配置启动虚拟机在F盘新建devops 文件夹,将centos-7.2.box 拷

持续集成与devops

持续集成 持续集成(Continuous integration,简称C1),简单的说持续集成就是频紧地(一天多次)将代码集成到主干,它的好处主要有两个:1.快速发现错误.每完成一次更新,就集成到主干,可以快速发现错误,定位错误也比较容易.2.防止分支大幅偏离主干.如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成.持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量.. 持续交付 持续交付(Cortinuous delivery)指的是,频繁地将软件的新版本,交付