当你刚进入一个行业时,你会遇到很多新概念。我们倾向于使用大量术语,文档可能是由头脑中更有经验的人编写的,或者依赖于其他领域的上下文知识,并且它通常不会解释工具的“原因”。这可能会让你在陌生的环境中很难站稳脚跟,尤其是对初级工程师来说。
在本次网络研讨会中,我们将分解CI/CD是什么——它如何为开发人员、组织和用户解决问题。我们还将介绍一些最流行的CI工具,并为您提供一个如何自己入门的实际示例。
额外的资源:
注册以查看网络研讨会
转录:
大家好,感谢大家参加JFrog网络研讨会,欢迎来到DevOps一对一,ci CD。
让我们开始吧。
首先介绍一下我自己,我叫Kat Cosgrove,是JFrog的一名开发者倡导者。在那之前,我是物联网团队的工程师,
我并不是通过严格的传统方式取得今天的成就的。我做过一段时间的自由网页开发人员,但我也做过调酒师、服务员、老师、常驻恐怖专家和一家独立音像店,如果你对恐怖电影有问题的话。我可以回答这两个问题。我信用很多我的成功作为一个工程师和开发人员提倡广泛的经验,我有我喜欢的传统非迂回路线到科技,这让我从很多不同的角度看到科技产业和有很多不同的斗争,但这些斗争实际上是相当普遍的技术,它与事实无关我没有计算机科学学位。计算机科学专业的毕业生也会遇到这些问题。不知何故,他们仍然完全没有解决,这不是很好。我想要停止这种情况,这样下一个接替我的人,就不用像我一样,花那么多时间来弄清楚这些事情。因此,在本次网络研讨会结束时,您应该了解CI CD是什么,它的历史,以及它的重要性。
如果你稍后想找我的话。你可以在推特上找到我,地址是Dixie three flatline,你也可以给我发邮件,地址是Kat C at JFrog.com。
我回复邮件有点慢,有时这是我意识到并正在努力解决的性格缺陷,但我总是很乐意帮忙。如果在我的能力范围内如果你们有问题,请不要犹豫联系我,无论是私下还是在这里的问答栏里。
开始吧。
首先,这并不简单。你经常看到这些东西被称为简单,但当你刚进入一个行业时,你会遇到很多新概念,这可能会让你很难站稳脚跟,完全陌生的环境对初级工程师和新手来说尤其如此。DevOps到底是什么意思。所有这些软件,所有的术语是DevOps,是一种方法论,还是一种工具集。这些真的会让我的生活更轻松吗,或者这只是一堆行业流行语,像高层管理和领导喜欢扔来扔去看起来很花哨。
我们有很多文件。它还假定您已经有了一些额外的上下文,或者您精通一些相关的工具,而这并不会使学习变得容易。所以,在这个网络研讨会上,我将分解,ci CD。
让我们从它实际上代表什么开始——CI代表持续集成,CD可以代表持续交付,也可以代表软膏。
是的,他们知道不同的意思,不,我不喜欢这样,但事实就是这样。
我保证我会解释的。
我们从CI开始。
实践持续集成意味着每天多次合并所有开发人员的工作代码库和源代码。
这样做需要一系列自动化的构建和单元测试,以确保所建议的更改不会引起问题,但结果是在开发过程的早期就发现了错误和集成问题。
就像理想情况下,每次提交都会触发构建,我知道这听起来真的很难管理,但并没有那么糟糕。因此,理想情况下,开发人员可以立即捕获故障并立即纠正故障,因为每次提交某些内容时都会运行新的构建和新的测试。这也迫使工程师编写更模块化的代码,这使得以后的支持更容易,因为这里的部分问题是人,其他人必须维护你的代码,其他人必须能够阅读和理解你的代码。因此,优先考虑可读性和可维护性是这里的重要部分。
持续集成实际上已经存在很长时间了。它自90年代初就存在了,尽管它并不总是被这样称呼。一些实现也有了一点改变。这种精神基本上没有改变。以更小但更频繁的增量方式将更改合并到源代码中,测试项目仍然会构建并运行这些更改,并确保您的工程师都在使用源代码的最新版本。这样做,你就不会在构建时遇到一堆合并冲突或意外问题。
1991年,一个名叫Grady Booch的人在他的书《面向对象的分析和应用程序设计》中首次提出了这个概念。
boot方法提倡在编程中更频繁地使用类和对象。为了简化设计,他的持续集成版本并没有建议每天发行多次游戏,但这是在1987年之后才出现的,极限编程在Booch方法的基础上提倡每天发行多次游戏,这确实改变了游戏,虽然现在回想起来这个名字听起来很荒谬,但它并不意味着极限编程,就像90年代的极限运动一样。它的极端意思是把一些已经被编程所接受的东西带得非常非常远,就像把它带到极端。所以,多亏了极限编程,我们现在有了更短的发布周期,结对编程只是极限编程给我们的极限代码审查的延伸。我们也有单元测试,验收测试就像编写软件的标准方面,这些都是我们现在都在做的事情,因为90年代的事情。
这些都让我们的生活更轻松。他们从根本上提高了质量,越来越多的方法,然后建立在这个基础上,把所有的东西都结合在一个目标上,使编写更清晰、更高质量的代码变得更容易,并更快地向用户提供。
在早期,我们意识到我们需要更频繁地发布游戏。我们真的没有工具让它变得更容易。直到2001年,随着cruise control的发布,我们才有了第一个使持续集成更容易实现的开源工具。如果你用谷歌图片搜索巡航控制,它现在看起来很原始,但在当时,它是革命性的。
所以这个概念已经存在了差不多30年了,但它一直在变化。我们还没有很好地解释这一点。
我们来谈谈cd吧。持续交付就像包装盒上写的那样,您的软件更新将与持续集成一起持续交付。这意味着你应该能够非常快速地部署一个新的构建,因为你已经自动化了一些原本需要手动执行的质量检验关,比如构建和测试的过程,减少了手工劳动,这意味着你可以发布一些小的更改,而不是每隔几个月进行一次巨大的更新。我不知道现在听众的年龄和经验是多少但在不久之前,看到主要应用一年或更长时间没有收到软件更新并不罕见,我稍后会谈到这个问题。
既然你现在做的是更小更渐进的改变。您还可以更加确信,当您向用户部署时,您的版本不会中断,或者如果发生了中断,您将能够更快地跟踪导致问题的原因,因为您最终将推动更新,持续部署与此类似,但它只是更进一步。在持续交付中,部署步骤是自动化的,在更新发布之前仍然需要手动进行质量检查。对某些人来说,这是一个很大的进步,它确实需要对你所构建的系统有很大的信任,但我个人也非常喜欢自动化部署,因为对于现代DevOps管道来说,这意味着你和工程师要尽可能地高效,人类的参与必须尽可能地消除。我在大约40%的演讲中都这么说,但人类真的非常不擅长重复的任务,对于一项卑微的任务,我们能做得多好,就像一个坚硬的天花板,一遍又一遍地重复。我们很容易感到无聊,我们很容易分心,也许有人今天心情不好,或者他们没有吃早餐或者其他什么,他们没有100%地工作,我们也非常非常慢。就像所有正常人都会犯错误一样。但电脑不会感到无聊或分心,而且速度也不慢。如果你编写了良好的全面测试,并自动化了你所能做的一切,除了你最终肯定会部署一个糟糕的更新,无论是否有人参与按下绿色的大按钮,你都会有更好的一天。这里重要的是你能够多快地响应并修正一个糟糕的更新。 Ci CD, helps you get there.
更深入地了解CI CD是什么,它能带给你什么。
从字面上看,这只是持续集成和持续交付或持续部署概念结合的一个术语,我们现在把它们捆绑在一起,但它们曾经是截然不同的东西,现在你真的看不到一个没有另一个。它是DevOps中非常重要的一部分,因为自动化效率是DevOps的全部要点,其中一个在DevOps的上下文中并不真正起作用,没有另一个,你确实需要两者。
实现CI CD实践使您获得了8个更快、更可靠的发布周期,您可以更快地添加新特性或修复错误,因为您知道您的工程师都在为最新的源代码工作,并且您知道有单元集成测试,并且您知道它的构建。对于工程师或QA或其他管理质量门的人来说,有很多手动步骤。相反,有人推送代码或打开拉取请求,这些步骤由你的CI CD工具来处理。它还可以自动化从开发到阶段再到生产的过程,你真的可以自动化你生命周期的每一部分。
让我们来谈谈它是如何工作的。首先,您需要一个CI CD工具,它将为您自动执行一堆手动过程。
它确实需要一些时间来设置其中一个的开始一个新的项目,但是就我个人而言,我是工程的特殊风味懒惰,我愿意花很多额外的时间,以确保我没有做很多重复性的手工任务,以后每一次我把代码的细节配置任何这些工具的不同,所以选择工具检查文档我将在短暂的后来,几个但广泛,它们都以同样的方式工作。
您说了一些作为触发器的内容,例如告诉它监视源存储库以进行提交或出现。然后你配置一系列步骤,每个步骤都有通过失败的条件,比如告诉它如何运行单元测试,告诉它如何构建,如何扫描漏洞,或者用足够详细的管道部署你的应用程序,你真的不需要做任何事情,只需要编写代码并推送它,其他一切都将为你处理,你可以让这些东西做任何事情。
具体细节和步骤定义方式因工具而异,但通常会有某种配置文件为你定义步骤,它可能与你的代码一起存在于repo中或单独的repo中仅用于CI,通常采用yaml格式。
有很多关于DevOps工作人员只是YAML工程师或DevOps是100% YAML的笑话,如果你做了很多关于CI CD的工作,或者与基础设施有关的工作,你可能会写很多YAML,这些笑话也不是完全不真实的。
这些工具中的大多数都有一个类似web界面的东西,给你一个图形化的概述,你的步骤看起来是什么样子的,经常有日志输出,这样你就知道到底发生了什么,什么时候很好。
现在我们知道了CI - CD是什么。那么,让我们来谈谈什么是一个好的更新,以及为什么它很重要,如果你在我的年龄或更大,你可能还记得过去在软件更新中有多少戏剧性。它们很大,很频繁,要花很多时间来应用变更日志很大。新版本很有可能在某些方面存在漏洞,在很多情况下,这是一种非常不方便的体验,甚至不可能下载更新,制造商必须通过物理介质为你提供更新,无论是软盘还是CD rom或USB驱动器。
上一次我不得不这么做是在2009年,感觉不是很久以前,但我猜是为了更新我工作的音像店的软件,我们依靠这个应用程序来操作。它很旧,需要更新,在2009年,供应商不得不给我邮寄一个u盘。
不,他们不会把可执行文件发给我。是的,我问过了,他们真的不会这么做。
在他们的辩护中,我猜这个特殊的应用程序仍然需要一个带有串行端口的机器,在那个时候,这种机器越来越不常见,就像你可以用百思买的零件组装的那种机器,因为它。许可证身份验证是通过验证仅通过串行连接的物理加密狗的存在来执行的。你们中的一些人可能比我年轻,你们甚至不知道串口是什么样子的。有些事情仍然以这种方式运作,但在少数行业之外,这种情况非常罕见,在这些行业中,这种情况仍然存在。遗憾的是,最好的办法。
手机也遇到过类似的问题,早在90年代就没有办法更新你的手机软件,让你决定买一部新手机。
最终,手机确实变得更智能了,但更新仍然需要插入手机,云存储也还不是很流畅,所以当你升级到新手机时,数据传输是通过物理电缆完成的。这也不是太遥远的过去,上一次我不得不这样做是在我从三星Galaxy换成谷歌Pixel的时候。几年前。
现在我们甚至没有想到,当你换手机时,你所有的联系人、照片、应用程序和其他任何东西,都在新手机上。有一些准备时间。当然,但它发生得非常无缝,当我手机上的应用程序更新时,我不会注意到它,因为它会在我睡觉的时候自动更新,比如凌晨三点,只要我的手机还在充电。
不过,让我们从消费者的角度来看问题。大多数现代汽车都装有电脑。那些电脑需要更新。
实际上,它们中的大多数无法通过无线方式进行更新,如果软件出现问题,就需要送到服务中心或经销商那里。
我知道你在想特斯拉,但我要谈谈特斯拉,但特斯拉是例外,而不是规则。这实际上是汽车行业的一个大问题,这是另一个完全不同的话题,但我只想说,无线更新给汽车制造商带来了很多昂贵的问题,我要以特斯拉为例,因为他们可以做到这一点,但他们并不完美。
你可能听说过幻影制动。如果没有,这是特斯拉自动驾驶仪的问题,在这种情况下,路况良好,道路畅通,没有明显的障碍物,但出于某种原因,自动驾驶仪突然刹车。有点烦人。这可能有点吓人。它花了一段时间来修复,并不是因为很难找到原因。为什么呢,因为它看起来很重要。是啊,这事应该尽快解决
实际上是因为一盘国际象棋。特斯拉当然有一个CI - CD系统,他们没有使用我们称之为持续更新的设计模式。
相反,他们分批发布更新,在同一更新中包含多个功能和修复。这通常是没问题的。这很常见,但在这种情况下,这并不好。
幻影刹车问题的修复是在一个更大的更新中进行的,在汽车的信息娱乐系统中增加了一个国际象棋游戏,这比解决汽车刹车问题更重要,你的本能反应可能会说,当然不是。刹车更重要,但这实际上要视情况而定。如果你的特斯拉没有自动驾驶仪,当时并不是每个人都有。你为什么要在意呢?
你只是想在你的车充电的时候下国际象棋什么的。如果你有自动驾驶包,你可能不太关心棋局,而更关心你的刹车,持续的更新可以防止这个问题,因为不是在他们准备好时发布修复和功能。在这里,你有对一组用户很重要的功能,等待与他们无关但对完全不同的用户很重要的功能。这是一种双输的情况,足够先进的CI CD管道可以提供这种情况
为领导。从金钱的角度来看,不频繁更新和不自动更新实际上会非常非常昂贵,有时甚至是致命的失败
2012年,一个糟糕的软件更新导致了股市的严重混乱,并使一家名为Knight capital的公司的价值大幅缩水。
他们是一家专门从事纽约证券交易所自动交易的贸易公司,有一天,一切都崩溃了。
一件容易的事。他们没有更新。
任何事情,自动地,他们没有自动化他们的部署,他们没有经常更新。
就像我之前说的,人类真的不擅长重复的任务。当我们在这些任务上没有任何练习时,我们尤其不擅长。
有两件事导致了这场灾难。
当工程师更新负责处理这些自动交易的8台服务器时。他忘了一个,8个人中只有7个人有新软件。
它们还重用API端点,但在新版本中改变其行为。
你也许能看出这是怎么回事。
当它投入生产时。这是对运行旧API端点的旧服务器的混乱请求,对148家公司的股价造成了严重破坏。工程师们的反应是让七台更新过的机器脱机,以回滚软件,从而增加了一台从未更新过的机器的负载。
没有日志记录,没有监控,也没有警报。
他们只能坐在那里,拼命地想弄清楚到底发生了什么,赔钱,在45分钟的时间里,每分钟都在赔钱,在这个糟糕的更新中,资本损失了4.4亿美元,最终破产。结果,这是一场悲剧,这是可以避免的,那些服务器都是手动更新的,但是人类,同样,我们会累了,我们会感到无聊,我们会分心,或者我们有糟糕的一天。再一次,这是正常的,你无法控制,因为这个过程是自动化的。这可能不会发生。
但对我来说,支持在CI CD上花费时间和精力的最令人信服的理由是安全性。
Ci CD使您能够更快地更新软件,这意味着更不容易受到已知问题的影响,并且能够在发生破坏时更快地做出反应。
这个你们可能很熟悉。这是最近发生的,虽然你可能不知道原因。
这是一个关于2017年9月Equifax灾难的故事,Equifax宣布在当年5月至7月之间发生了严重的违规行为。还记得第一个月吗?近1.49亿美国人的姓名、地址、生日、驾照号码和社会安全号码被盗。黑客利用了CVE 2017 5638漏洞,这是一个非常常用的web框架Apache struts中的漏洞,谈论卷的实际工作方式,有点超出了本次网络研讨会的范围。
但要点是,它将允许攻击者以web服务器拥有的任何权限远程执行命令。
这是非常非常严重的。需要澄清的是,这不是一个在雷达下飞行的漏洞,苹果公司,甚至在这个漏洞被攻破之前,这个CVE在安全领域是一个大新闻,每个人都惊慌失措。它被归类为一个严重的漏洞,因为cbs得分为10分,这是绝对必须认真对待并立即纠正的最大值。该漏洞于3月份披露并公布,比Equifax实际被攻破的时间早了两个月。
一旦他们发现了漏洞。他们又花了整整两个月的时间来升级所有易受攻击的struts版本,并提起诉讼,导致联邦贸易委员会支付5.75亿美元和解,以及对受影响的人的支付和信用监控。
对我们来说不幸的是,受影响的人数如此之多,以至于除了律师费之外,许多人除了一生对自己的信用持偏执态度外,什么也没有得到。
这最初是由于缺乏漏洞检测造成的,他们只是不知道。
但由于他们无法快速更新,本不应该花两个月的时间来解决这个问题。
希望现在我已经解释了,ICD是什么,并且足够让你相信它是值得的。
现在我想带你们看一些工具。
让我们来看看实际的CI CD系统,以及定义免费增值解决方案步骤的配置文件,其中免费使用是有限的,但它通常适用于个人项目或小型项目。我使用GitHub的动作,很多,这是我将在这里使用的一个例子,因为它很容易设置,并可用于GitHub上托管的任何项目。我还将使用JFrog CI,这样我就可以像在现实生活中一样,在实际存储二进制文件的地方与我的CI系统对话。
我还可以向您展示如何进行漏洞检测。人工和X射线都包含在JFrog免费层中,所以你也可以尝试一下。
如果您在企业II环境中,JFrog管道是您的一个选择,它目前不包括在免费层中。但是,你知道,如果你是一个企业客户你可能会和你的裁判谈谈,看看能否得到一个快速的试用,让我分享我的屏幕给你。
开始吧。
我会把这个放大,这样大家看得更清楚,但它会让东西看起来有点压扁。
这是我的GitHub的repo,我用于一个研讨会。我们有这个Pull Request挂在这里。
我们看到它有一些检查,这是我们的GitHub动作。让我们来看看这里到底发生了什么。
只是叫做样本工作流,它真的很小。它只是用于演示。
但是它处理了很多我们通常需要手工处理的东西,这些的语法非常简单。
首先为我设置JFrog COI。这样,我就可以与Artifactory(我所有包当前存储的地方)进行通信,并配置它与我的Artifactory实例进行通信。
然后它会做一堆事情,这将是一个很大的手动过程。首先,它通过Docker登录,这样它就可以构建我的Docker容器,它只是一个很小的一行Docker文件,只是拉出Ubuntu,
然后它会把被标记的建造物推回人工工厂,我很快就会给你展示在那里生活的一切。它还会为我收集一堆环境变量,并将其打包成我们称之为构建信息的东西,它会给你一堆额外的元数据,比如关于构建中发生的事情的上下文,所以更容易跟踪发生了什么,什么被提升了。什么是失败,诸如此类。就我个人而言,我有点过头了,需要知道所有可能发生在我账单上的事情,所以这是我非常非常非常喜欢的东西,作为我的CI的一部分。
然后它将构建信息发布回Artifactory。让我们来看看实际的工作流程,这样你就可以看到其中一个是什么样子的。所以GitHub动作的工作方式是,你会在你的repo中有一个简单的目录,比如这个名为。GitHub的隐藏文件夹。在这里面,有一个叫做工作流的文件夹。
这只是一个示例工作流,但如果您以前从未见过YAML,那么这就是它的样子。它非常适合人类阅读,非常容易阅读,就像一眼就能看到发生了什么。一般来说,它很容易写。你可能会遇到一些问题,比如制表符和空格,但你只要在你的编辑器中使用YAML筛选器就可以了。但我们给了它一个名字样例工作流就是你之前在Actions下面看到的,当我点击的时候。我们首先定义,当动作,我们会运行这是我之前说过的触发器。在这种情况下,只要有东西被推送到主分支,或者在主分支上打开拉取请求,它就会触发。所以我们之前看到,因为我从我的开发分支打开了一个拉取请求,让master可以定义我们的工作,以及一些关于我们账单的信息,比如运行程序的类型,我总是默认使用Ubuntu,但也有其他选择。从这里开始,我们开始定义我们的步骤。它就在这里面。 Das bash scripting. So if you are familiar with bash, you can do, dump it on anything that you can just do with bash in a normal Lubuntu environment. You can also if you need to like install Python and Pip, if you need to have different soften things or whatever it’s just a stripped down Lubuntu container. So it is really really flexible. This is true for almost every CI CD tool out there, if you want to automate something that you were doing mainly manually you probably can, with one of these tools up here it’s literally just looks like normal terminal commands back over into Artifactory what that gets us, is these builds, like this is the Docker build that you saw, it’s collecting build info for and building and tagging and throwing back into Artifactory. You also see something here called X ray status, this is being scanned for vulnerabilities and it has found a problem.
让我们来看看这里发生了什么。
X射线数据。是的,我们在这里看到了一些违规行为,我在我的人工设备和X射线中设置了一些规则,以确保在某一点上所有东西都得到了检查,如果有东西超过了我的舒适水平,就会提醒我在这种情况下,我想让我知道是否发现了中等或更高的严重程度,这是你可以在CI系统中退回账单的条件之一。所以,如果你想
编辑这个。
他想让你加入他的CI系统。如果有什么事情触发了政策,就像你说的,如果发现了严重程度很高的事情。构建会失败,它不会得到它不会得到构建,你也可以阻止下载并阻止发布最终发行版。所以这是一种作为CI系统的一部分可能会阻止Equifax灾难的事情,这是一种,想一下,但它真的,真的非常重要的是尝试自动化尽可能多的这些事情,因为你和你的工程师,你没有时间,精力,资源来做所有这些事情,你应该经常手工做。2022世界杯阿根廷预选赛赛程
在某种程度上,花时间学习如何使用这些工具,学习如何声明YAML管道并让它为您处理测试,构建,漏洞检测,部署以及所有这些,而不是让别人反复手动执行这些操作,这是更好的方法。一开始确实需要花时间去学习如何做到这一点,但从长远来看,它确实为你节省了很多时间。我希望你们都能尝试一下。但如果你想自己尝试一下,你可以注册JFrog平台的免费版本,它可以让你获得Artifactory和X射线。所以你有一个地方来存储你所有的包,你所有的构建,比如,几乎任何你可能使用的东西,因为还有一个通用的存储库类型。
如果你正在使用一些我们不明确支持的东西,然后设置GitHub动作。如果你没有企业平台账户,如果你使用的是免费层,那就用GitHub actions试试,看看你是否喜欢,如果你想去看看这个repository cat cause Grove slash DevOps Dash 101 Dash workshop,你甚至可以复制我的样例工作流并自己尝试,看看它是如何运行的,你将不得不填写一些空白,但那里有说明,
这里有很多文档可以帮助你完成它如果你想要自己动手,如果你去了CIC模块。这里有各种各样的说明,希望这能让你更容易一些,否则你可能会在网上盲目地搜索。
总之,我在高中的时候写了一篇研究论文。ICD是方法论和工具的结合,其最终目标是通过自动化构建、测试和部署等工作来提高开发人员的速度和效率,这样您就可以更频繁地完成所有这些工作,而不是花费大量时间手动完成这些工作。
对您来说,好处是更频繁地发布软件,更早地检测错误和漏洞问题,以及更少地将糟糕的版本用于生产。
有很多工具可以帮助你实现这一目标,从免费增值的GitHub actions、Travis或circle CI,到具有JFrog pipeline等附加功能的企业级工具。
我希望我已经帮助您了解了C ICD是什么以及它为您做了什么。
如果你还不明白。这也没关系,这是一个大问题,其中一些还在不断变化,在过去的三年里发生了很大的变化,可能还会持续一段时间。如果你想联系我,你可以在Twitter上联系我,地址是Dixie sweet flatline,可以发邮件联系我,也可以在JFrog联系我。如果你喜欢LinkedIn,我的LinkedIn也在这张幻灯片上,所以我不怎么用它。它就在那里。
让我们来看一些问题。
