当你刚进入一个行业时,你会遇到很多新概念。我们倾向于使用大量的术语,文档可能是由更有经验的人编写的,或者依赖于其他领域的上下文知识,而且它通常不会解释使用该工具的“原因”。这可能会让你很难在不熟悉的环境中站稳脚跟,尤其是对初级工程师来说。
在本次网络研讨会中,我们将详细介绍CI/CD是什么——它是如何为开发人员、组织和用户解决问题的。我们还将介绍一些最流行的CI工具,并为您提供一个如何开始使用的实际示例。
额外的资源:
注册查看网络研讨会
转录:
大家好,感谢大家参加这次JFrog网络研讨会,欢迎来到DevOps one on one, ci CD。
让我们开始吧。
首先,简单介绍一下我自己,我叫Kat Cosgrove,是JFrog的开发人员。在此之前,我是这里物联网团队的工程师,
我并不是通过严格意义上的传统方式取得今天的成就。我做过一段时间的自由网页开发,但我也做过酒保、服务员、教师和常驻恐怖专家,还有一个独立的音像店,所以如果你有关于恐怖电影的问题。我可以回答这两个问题。我信用很多我的成功作为一个工程师和开发人员提倡广泛的经验,我有我喜欢的传统非迂回路线到科技,这让我从很多不同的角度看到科技产业和有很多不同的斗争,但这些斗争实际上是相当普遍的技术,它与事实无关我没有计算机科学学位。计算机专业的毕业生也会遇到这些问题。但不知何故,这些问题仍然完全没有得到解决,这并不好。我想停止这种情况,这样下一个接替我的人,就不必像我一样花那么多时间来解决这些问题。因此,在本次网络研讨会结束时,您应该了解CI CD是什么,它的历史,以及为什么它很重要。
如果你以后还想找我的话。你可以在推特上找到我,地址是Dixie three flatline,你也可以给我发邮件,地址是Kat C at JFrog.com,只是提醒一下。
我回复邮件有点慢,有时这是我意识到并正在改正的性格缺陷,但我总是很乐意帮忙。如果在我的职权范围内,所以如果你有问题,请不要犹豫,无论是私下里还是在这里的QA盒子里。
开始吧。
首先,这并不简单。你经常看到这些东西被称为简单,但当你刚进入一个行业时,你会遇到很多新概念,这可能会让你很难适应完全陌生的环境,这对初级工程师和新手来说尤其如此。那么,DevOps到底是什么意思?所有这些软件,所有的行话是什么DevOps,一种方法论,还是一个工具集。这些真的会让我的生活更轻松吗,还是说这只是一堆行业流行语,上层管理和领导喜欢把它看起来很花哨。
我们有很多文件。它还假定您已经有了一些额外的上下文,或者您精通一些相关的工具,而这并不能使它易于学习。在这个网络研讨会上,我将分解,ci CD。
让我们从它实际上代表什么开始CI代表持续整合,CD既可以代表持续输送,也可以代表药膏。
是的,他们知道不同的意思,不,我不喜欢这样,但事实就是这样。
不过我保证我会解释的。
我们从CI开始。
实践持续集成意味着每天多次将所有开发人员的代码库与源代码合并。
这样做需要一系列自动化的构建和单元测试,以确保所建议的更改不会引起问题,但结果是在开发过程的早期就发现了错误和集成问题。
理想情况下,每次提交都会触发一个构建,我知道这听起来很难管理,但并没有那么糟糕。因此,理想情况下,开发人员可以立即发现故障并立即纠正,因为每次提交时都会有新的构建和新的测试运行。这也迫使工程师编写更加模块化的代码,这使得以后更容易支持,因为这里的部分问题是人,其他人必须维护你的代码,其他人必须能够阅读和理解你的代码。因此,优先考虑可读性和可维护性是这里的一个重要部分。
持续集成实际上已经存在很长时间了。自90年代初以来,它就已经存在了,尽管它并不一直被称为。其中的一些实现也发生了一些变化。这种精神在很大程度上没有改变。以更小但更频繁的增量将更改合并到源代码中,测试项目仍然使用这些更改构建和运行,并确保您的工程师都在使用源代码的最新版本。这样做,就不会在构建时出现一堆合并冲突或意外问题。
1991年,一个名叫Grady Booch的人在他的书《面向对象的分析与应用设计》中首次提出了这一观点。
引导方法提倡在编程中更频繁地使用类和对象。为了简化设计,他的持续集成版本并没有建议一天发布多次,尽管这发生在1987年,极限编程成为一种东西,它建立在Booch方法的基础上,提倡一天发布多次,它确实改变了游戏,就像它的名字听起来一样荒谬,它并不意味着极限编程,就像90年代的X游戏一样,像极限运动那样。它指的是把已经被编程所接受的东西发挥到极致。所以,多亏了极限编程,我们现在有了更短的发布周期,结对编程只是极限编程给我们的极限代码审查的扩展。我们也有单元测试和验收测试,就像编写软件的标准方面一样,这些是我们现在都在做的事情,因为90年代的一件事。
这些都让我们的生活更轻松。他们从根本上提高了质量,采用了越来越多的方法,然后在此基础上,将所有的方法结合到一个目标上,使其更容易编写更清晰,更高质量的代码,并更快地将其交付给用户。
在早期,虽然我们意识到我们需要更频繁地发布。我们真的没有工具让它变得更容易。直到2001年,随着cruise control的发布,我们才有了第一个使持续集成更容易实现的开源工具。如果你去谷歌图像搜索巡航控制,现在看起来很原始,但在当时,这是革命性的。
所以这个概念已经存在了很长一段时间,大概有30年了,但它一直在变化。我们还没有很好地解释这一点。
我们来谈谈cd吧。持续交付就像包装盒上写的那样,你的软件更新会随着持续集成而持续交付。这意味着你应该有能力非常快速地部署一个新的构建,因为你已经自动化了一些本来需要手动执行的质量检验关,比如构建和测试的过程,减少了人工劳动,这意味着你可以发布一堆小的更改,而不是每几个月一次巨大的更新。我不知道现在听众的年龄和经验是多少,但在不久之前,主要应用程序一年或更长时间没有得到软件更新是很正常的,我稍后会稍微讲一下这个。
因为你现在做的是更小更渐进的改变。你也可以更有信心,当你部署给你的用户时,你的发布不会崩溃,或者如果它崩溃了,你将能够更快地追踪到导致问题的原因,因为你最终将推动更新,连续部署是类似的,但它只是更进一步。在持续交付中,部署步骤是自动化的,在更新发布之前仍然涉及到人工质量检查。对某些人来说,这是一大步,它确实需要对你所构建的系统有很大的信任,但就我个人而言,我也是自动化部署的超级粉丝,因为就像现代DevOps管道一样,这意味着你和工程师尽可能高效地在任何地方都必须消除人类的参与。我大概有40%的演讲都是这么说的,但人类真的非常不擅长重复的任务,我们通过一遍又一遍地做一项卑微的任务,能做到多好,就像有一个坚硬的天花板。我们很容易感到无聊,我们很容易分心,也许有些人今天过得很糟糕,或者他们不吃早餐或其他什么,他们没有100%地工作,我们也非常非常慢。这就像,所有正常人都会犯错误。但电脑不会感到无聊或分心,而且速度也不慢。如果你编写了很好的全面测试,并尽可能地自动化所有事情,那么除了你最终肯定会部署一个糟糕的更新之外,不管是否有人参与按下那个大的绿色按钮,你都会过得更好。这里重要的是你能多快地回应和纠正错误的更新。 Ci CD, helps you get there.
再深入一点了解CI CD是什么,它能给你带来什么。
从字面上看,这只是一个术语,指的是持续集成的概念和持续交付或持续部署的概念的结合,我们现在把它们捆绑在一起,但它们过去确实是完全不同的东西,现在你真的看不到一个没有另一个。这是DevOps中非常重要的一部分,因为自动化效率是DevOps的全部意义所在,其中一个在DevOps上下文中是行不通的,如果没有另一个,两者都需要。
实现CI CD实践可以让你更快,更可靠的发布周期,你可以更快地添加新功能或修复错误,因为你知道你的工程师都在为最新的源代码工作,你知道有单元集成测试,你知道它的构建。对于工程师或QA或其他管理质量闸门的人来说,有很多手动步骤。相反,有人推送代码或打开一个拉请求,这些步骤由你的CI CD工具来处理。它还可以自动化从开发到登台再到生产的事情,你真的可以自动化你生命周期的每个部分。
让我们来谈谈它是如何工作的。首先,您需要一个CI CD工具,它将为您自动化一系列手动流程。
它确实需要一些时间来设置其中一个的开始一个新的项目,但是就我个人而言,我是工程的特殊风味懒惰,我愿意花很多额外的时间,以确保我没有做很多重复性的手工任务,以后每一次我把代码的细节配置任何这些工具的不同,所以选择工具检查文档我将在短暂的后来,几个但广泛,它们都以同样的方式工作。
您说了一些东西作为触发器,比如告诉它观察源存储库的提交或出现。然后你配置一系列步骤,每个步骤都有Pass Fail条件,比如告诉它如何运行你的单元测试,告诉它如何构建,如何扫描漏洞,或者用一个足够详细的管道部署你的应用程序,你真的什么都不用做,只需要写代码和推送它,其他的一切都将为你处理,你可以让这些东西做任何事情。
具体的步骤定义方式因工具而异,但通常会有某种类型的配置文件为您定义步骤,它可能与您的代码一起存在于回购中,也可能存在于仅用于CI的单独回购中,它通常采用一种名为yaml的格式。
有很多关于DevOps的工作人员只是YAML工程师或者DevOps 100%是YAML的笑话,这些笑话也不是完全不真实的,如果你做了大量的CI CD工作,或者与基础设施有关的工作,你可能会写很多YAML。
大多数这些工具也有类似web界面的东西,可以让你对你的步骤进行图形化的概述,通常还有日志输出,这样你就可以确切地知道发生了什么,以及什么时候它很流行。
现在我们知道什么是CI CD了。所以让我们来谈谈什么是一个好的更新,以及为什么它是重要的,如果你在我这个年龄或更大,你可能还记得过去软件更新涉及多少戏剧性。它们很大,很频繁,需要花很多时间去应用变化日志很大。新版本很有可能在某些方面存在漏洞,在很多情况下,这是一种非常不方便的体验,甚至不可能直接下载更新,制造商必须通过物理介质为你提供更新,无论是软盘、CD rom还是u盘。
上一次我不得不这么做是在2009年,感觉不是很久以前,但我想是更新我工作的音像店的软件,我们依靠这个应用程序来操作。它太旧了,需要更新,在2009年,供应商不得不邮寄给我一个u盘。
不,他们不会把可执行文件发邮件给我。是的,我问了,他们真的不会这么做。
在他们的辩护中,我猜这个特殊的应用程序仍然需要一个带有串行端口的机器,在那个时候,这已经越来越不常见了,就像你可以在百思买用零件制造的那种机器,因为它。许可证身份验证是通过验证只通过串行连接的物理加密狗的存在来执行的。你们中的一些人,比我年轻,你们可能甚至不知道串行端口是什么样子。有些事情仍然以这种方式工作,但在少数行业之外是非常罕见的,在这些行业中,它仍然是。遗憾的是,这是最好的方法。
手机也遇到过类似的问题,早在90年代,还没有真正的方法来更新你的手机软件,让你决定买一部新手机。
最终,手机确实变得更智能了,但更新仍然需要插入手机,而且云存储还不是很成熟,所以当你升级到新手机时,数据传输是通过物理电缆完成的。这也不是很久以前的事了,上一次我不得不这么做是在我从谷歌像素的三星Galaxy换手机的时候。几年前。
现在我们甚至不用考虑,当你换手机时,你所有的联系人、照片、应用程序和其他东西,都在新手机上。有一些准备时间。当然,但它发生得非常无缝,我不再注意到我手机上的应用程序更新了,因为它会在我睡觉的时候自动更新,比如凌晨三点,只要我的手机是带充电器的。
不过,让我们从消费者的角度来看问题。大多数现代汽车都装有电脑。那些电脑需要更新。
实际上,大多数软件都不能通过无线方式进行更新,如果软件出现问题,就需要送到服务中心或经销商那里。
我知道你在想特斯拉,但我要讲的是特斯拉,但特斯拉是例外,而不是规则。这实际上是汽车行业的一个大问题,这是一个完全不同的话题,但我只想说,空中更新给汽车制造商带来了很多昂贵的问题,我要用特斯拉作为例子,因为他们可以做到,但他们并不完美。
你可能听说过幻影制动。如果没有,这就是特斯拉自动驾驶仪的问题,当时条件很好,道路很清晰,没有明显的障碍物,但出于某种原因,自动驾驶仪猛踩了刹车。有点烦人。这可能有点吓人。这需要一段时间来修复,并不是因为很难找到原因。为什么呢,因为它看起来很重要。是啊,就像一些需要尽快解决的问题
实际上是因为一场象棋比赛。特斯拉当然有一个CI CD系统,他们没有使用我们称之为持续更新的设计模式。
相反,他们批量发布更新,在同一个更新中包含多个功能和修复程序。这通常是没问题的。这很常见,但在这种情况下,这并不好。
幻影刹车问题的修复是与一个更大的更新一起进行的,即在汽车的信息娱乐系统中添加了一个国际象棋游戏,这比修复汽车刹车问题更重要,你的膝跳反应可能会说,不,当然不是。刹车更重要,但这要视情况而定。如果你的特斯拉没有自动驾驶系统,那时候并不是每个人都有。你为什么要在乎。
你只是想在你的车充电的时候下象棋。如果你有自动驾驶包,你可能会少关心一点象棋游戏,多关心一点你的刹车,持续的更新可以防止这个问题,因为不是发布补丁和功能,因为他们已经准备好了。在这里,您拥有对一组用户很重要的功能,等待与他们无关但对完全独立的一组用户很重要的功能。这是一个双输的情况,一个足够先进的CI CD管道可以提供
为领导。从金钱的角度来看,不频繁地自动更新实际上会非常非常昂贵,有时甚至会致命
2012年,一次错误的软件更新导致股市严重混乱,Knight capital公司的价值大幅缩水。
他们是一家专门在纽约证券交易所进行自动化交易的交易公司,有一天,一切都崩溃了。
一件容易的事。他们没有更新。
他们没有自动化部署,也没有频繁更新。
就像我之前说的,人类真的不擅长重复的任务。当我们在这些任务上没有任何练习的时候,我们尤其不擅长这些任务。
两件事促成了这场灾难。
当工程师更新负责处理这些自动交易的八台服务器时。他忘记了其中只有七家公司有新软件。
它们也重用API端点,但在新版本中改变了行为。
你大概可以看出这是怎么回事。
当它投入生产时。这是对运行旧API端点的旧服务器的混乱请求,对148家公司的股价造成了严重破坏。工程师们的回应是,让这七台更新过的机器脱机,以回滚软件,增加了那台从一开始就没有更新过的机器的负载。
没有日志记录,没有监控,也没有警报。
他们不得不坐在那里,绝望地试图弄清楚发生了什么,每分钟都在赔钱,在这个糟糕的更新的45分钟里,现场资本损失了4.4亿美元,最终倒闭。结果,这是悲剧,这是可以预防的,那些服务器都是手动更新的,但是人类,我们会累,我们会无聊,我们会分心,或者我们有糟糕的一天。这很正常,你无法控制因为这个过程已经自动化了。这可能不会发生。
不过,对我来说,支持在CI CD上花费时间和精力的最令人信服的理由是安全性。
Ci CD使您能够更快地更新您的软件,这意味着不容易受到已知问题的影响,并且能够在出现漏洞时更快地做出反应。
这是你可能很熟悉的东西。它是最近才发生的,尽管你可能不知道原因。
这是一个关于2017年9月Equifax灾难的故事,Equifax宣布在当年5月至7月期间发生了严重违约。记得在那里的第一个月。5月,近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系统中,就像在现实生活中一样。
我还可以告诉你如何进行漏洞检测。Artifactory和X射线都包含在JFrog免费层中,所以你也可以尝试一下。
如果你在一个更企业级的II环境中,JFrog管道是你的一个选择,它目前还没有包含在免费层中。但是,你知道,如果你是企业客户,你可能可以和你的裁判谈谈,看看是否能快速试用,所以让我为你分享我的屏幕。
开始吧。
我会把这个放大,这样你们就更容易看懂了,但这会让东西看起来有点压扁。
这是我的GitHub回购,我用于一个车间。这里有一个Pull Request。
我们看到它有一些检查,这是我们的GitHub动作。让我们看看里面到底发生了什么。
就叫样例工作流,非常小。这只是为了演示。
但它处理了很多我们通常需要手动处理的东西而且语法非常简单。
它开始设置JFrog COI为我。这样我就可以与Artifactory对话,这是我所有包当前存储的地方,配置它与我的Artifactory实例对话。
然后它会做很多手工操作的事情。首先,它通过Docker登录,这样它就可以构建Docker容器,它只有一行Docker文件就是拉Ubuntu,
然后它会把带标记的构建推回Artifactory,我很快会给你们展示它都在那里。它还会为我收集一堆环境变量,并把它打包成我们称之为构建信息的东西,它会给你一堆额外的元数据,比如构建中发生的事情的上下文,所以它更容易跟踪发生了什么,比如被提升了什么。什么是失败,在哪里之类的事情。就我个人而言,我有点过分了,我需要知道我账单上可能发生的所有事情,所以这是我非常非常喜欢的事情,作为我CI的一部分。
然后它将构建信息发布回Artifactory。让我们来看看实际的工作流,这样您就可以看到其中一个工作流是什么样子的。GitHub操作的工作方式是,你会在你的repo中有一个简单的目录,比如这个叫做。GitHub的隐藏文件夹。在这个文件夹中,有一个叫做工作流的文件夹。
这只是一个示例工作流,但如果您以前从未见过YAML,那么它就是这样的。它是非常适合人类阅读的,它非常容易阅读,就像一眼就能看到发生了什么。一般来说,它很容易写。你可能会遇到一些问题,比如制表符和空格符,但你只要在编辑器中使用YAML linter就可以了。但我们给了它一个名字,样本工作流,就是之前我在Actions中点击时看到的。我们首先定义,比如当action运行时这是我之前讲过的触发器。在本例中,每当有东西被推送到我的主分支,或者每当对主分支打开一个拉请求时,它就会触发。我们之前看到,因为我从我的开发分支打开了一个pull request, 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线数据。是的,我们在这里看到了一些违规行为,我在我的Artifactory和X射线中设置了一些规则,以确保在某一点上实际上检查了所有内容,并在超出我的舒适水平时提醒我,在这种情况下,我想让我知道是否发现了中等严重程度或更高的情况,这是你可以在CI系统中反弹账单的情况之一。所以,如果你想
编辑这个。
他想让你成为CI系统的一部分。如果有什么东西触发了你说的政策,如果发现了严重程度高的东西,就穿衣服。构建会失败,它不会被构建,你也可以阻止下载,阻止最终发行。因此,这是一种作为CI系统的一部分可能会防止Equifax灾难的事情,这是一种,难以想象的事情,但尝试尽可能多地自动化这些事情是非常重要的,因为你和你是工程师,你没有时间,精力,资源来手动做所有这些事情,就像你应该做的那样频繁。2022世界杯阿根廷预选赛赛程
花时间学习如何使用这些工具,学习如何声明一个YAML管道,并让它为你处理测试、构建、漏洞检测和部署,而不是让别人重复地手动做这些事情,这在某种程度上要好得多。一开始的确需要花点功夫去学习如何做这件事,但从长远来看,它真的会为你节省很多时间。我希望你们都能尝试一下。但如果你想自己尝试一下,你可以注册JFrog平台的免费版本,它可以让你获得Artifactory和X射线。所以你有一个地方来存储你所有的包,你所有的构建,几乎任何你可以使用的东西,因为还有一个通用的存储库类型。
如果你使用的是我们不明确支持的东西,然后设置GitHub动作。如果你没有企业平台账户,如果你在使用免费层,那就用GitHub动作试试,看看你是否喜欢它,如果你想去看看这个仓库,你甚至可以复制我的样本工作流,自己试试,看看它是如何运行的,你必须填一些空白,但那里有说明,
这里有很多文档可以帮助你完成如果你想自己动手去尝试,如果你去CIC模块。这里有各种各样的说明,希望能让你比在网上盲目地搜索更容易一些。
总之,我在高中写一篇研究论文。ICD是方法论和工具的结合,其最终目标是通过自动化构建、测试和部署等工作来提高开发人员的速度和效率,这样您就可以更频繁地完成所有这些事情,而不是花费大量时间手动完成这些工作。
对您的好处是更频繁地发布软件,更早地检测到错误和漏洞问题,而糟糕的版本更少地进入生产环境。
有一些工具可以帮助你实现这一目标,从免费增值工具(如GitHub动作、Travis或圈子CI)到企业规模的工具(如JFrog管道)。
我希望我已经帮助您理解了cicd是什么以及它为您做了什么。
如果你仍然困惑。这也没关系,这是一个大问题,其中一些仍在变化中,在过去的三年里发生了很大的变化,它可能会继续改变一段时间。如果你想联系我,你可以在推特上Dixie sweet flatline,通过电子邮件和JFrog。如果你喜欢领英,我的领英也在这张幻灯片上,所以我不怎么用。它就在那里。
让我们去看一些问题。
