当你刚进入一个行业时,你会遇到很多新概念。我们倾向于使用大量行话,文档可能是由头脑中更有经验的人编写的,或者依赖于其他领域的上下文知识,而且它通常没有解释工具的“为什么”。这可能会让你很难在一个不熟悉的地方站稳脚跟,尤其是对初级工程师来说。
在这次网络研讨会上,我们将分解什么是CI/CD——它是如何为开发人员、组织和用户解决问题的。我们还将介绍一些最流行的CI工具,并为您提供一个如何开始使用的实际示例。
额外的资源:
注册查看网络研讨会
转录:
大家好,感谢大家参加这次JFrog网络研讨会,欢迎来到DevOps一对一,ci CD。
让我们开始吧。
首先,简单介绍一下我自己,我叫Kat Cosgrove,是JFrog的一名开发人员倡导者。在此之前,我是这里物联网团队的工程师,
我并不是通过严格传统的方式取得今天的成就。我做过一段时间的自由网络开发者,但我也做过酒保、服务员、老师、常驻恐怖电影专家和独立音像店,所以如果你有关于恐怖电影的问题。我可以回答这两个问题。我信用很多我的成功作为一个工程师和开发人员提倡广泛的经验,我有我喜欢的传统非迂回路线到科技,这让我从很多不同的角度看到科技产业和有很多不同的斗争,但这些斗争实际上是相当普遍的技术,它与事实无关我没有计算机科学学位。计算机专业的毕业生也会遇到这些问题。但不知何故,这些问题仍然完全没有得到解决,这并不好。我想阻止这种情况,这样下一个接替我的人,就不用像我一样花那么多时间来解决这些问题。因此,在这次网络研讨会结束时,你应该了解CI CD是什么,它的历史,以及它为什么重要。
如果你以后想找我的话。你可以在Dixie三个flatline的推特上找到我,你也可以给我发邮件到Kat C JFrog.com,提醒一下。
我回复邮件的速度有点慢,有时这是我意识到的一个性格缺陷,我正在努力解决,但我总是很乐意帮忙。如果在我的能力范围内,所以如果你有问题,请不要犹豫,尽管来找我,不管是私下问还是问我们的答疑箱。
我们开始吧。
首先,这并不简单。你经常会看到这些叫做简单的东西,但是当你刚进入一个行业时,你会遇到很多新的概念,这可能会让你非常非常难以适应完全不熟悉的环境这对初级工程师和新手来说尤其如此。那么,DevOps到底是什么意思呢?这些软件是什么,这些行话是什么,DevOps是一种方法论,还是一套工具。这些真的会让我的生活更轻松吗,还是说这只是一堆行业流行语,就像上层管理人员和领导层喜欢随意使用的,看起来很花哨。
我们有很多文件。它还假设您已经有了一些附加的上下文,或者您精通一些相关的工具,而这并不会使学习变得容易。所以,在这次网络研讨会上,我将分解,ci CD。
让我们从它代表什么开始CI代表持续整合,CD可以代表持续输送,或者软膏。
是的,他们知道不同的意思,不,我不喜欢那样,但事实就是这样。
我保证我会解释的。
我们从CI开始。
实践持续集成意味着每天多次将所有使用源代码的代码库的开发人员合并在一起。
这样做需要一系列自动化的构建和单元测试,以确保建议的更改不会导致问题,但结果是在开发过程的较早阶段就发现了bug和集成问题。
理想情况下,每次提交都会触发一个构建,我知道这听起来很难管理,但也没那么糟糕。因此,理想情况下,开发人员会立即捕捉到失败并立即纠正,因为每次提交内容时都会运行新的构建和新的测试。这也迫使工程师编写更模块化的代码,这使它更容易在以后得到支持,因为这里的部分问题是人,其他人必须维护你的代码,其他人必须能够阅读和理解你的代码。因此,优先考虑可读性和可维护性是这里的重要部分。
持续集成实际上已经存在很长时间了。它从上世纪90年代初就出现了,尽管它并不总是这么叫。一些实现也发生了一些变化。这种精神基本上没有改变。以更小但更频繁的增量将更改合并到源代码中,以测试项目仍然使用这些更改构建和运行,并确保您的工程师都在源代码的最新版本上工作。这样做,在构建时就不会出现一堆合并冲突或意外问题。
这是一个叫Grady Booch的人在1991年在他的书《面向对象分析和应用程序设计》中首次提出的。
引导方法提倡在编程中更频繁地使用类和对象。为了简化设计,他的持续整合版本并没有建议每天发布多次内容,直到1987年极限编程才开始流行起来,它基于Booch的方法,提倡每天发布多次内容,它改变了游戏,就像它的名字听起来一样荒谬,它并不是极限编程的意思,就像90年代的X Games一样。它的意思是把已经被编程所接受的东西发挥到极致,发挥到极致。所以,感谢极限编程,我们现在有了更短的发布周期,结对编程只是极限编程给我们的极限代码审查的扩展。我们也有单元测试和验收测试,就像编写软件的标准方面一样,这些都是我们现在都在做的事情,因为90年代的事情。
这些都让我们的生活更轻松。他们从根本上提高了质量,采用了越来越多的方法,然后在此基础上,将所有这些结合起来,心中只有一个目标,使编写更清晰,更高质量的代码更容易,更快地交付给用户。
在早期,我们意识到我们需要更频繁地发布游戏。我们没有工具让这变得更容易。直到2001年,随着cruise control的发布,我们才有了第一个使持续集成更容易实现的开源工具。如果你用谷歌图像搜索巡航控制,它现在看起来很原始,但在当时,它是革命性的。
这个概念已经存在了很长一段时间,大概有30多年了,但它一直在变化。我们还没有很好地解释这一点。
我们来谈谈cd吧。持续交付是指包装盒上写的内容,您的软件更新与持续集成相一致,持续交付。这意味着您应该有能力非常迅速地部署一个新的构建,因为您已经自动化了一些本来需要手动执行的质量检验关,比如构建和测试过程,减少了手工劳动,意味着您可以发布一堆小的更改,而不是每隔几个月发布一个巨大的更新。我不知道现在听的人的年龄和经验是多少,但在不久之前,大型应用程序一年或更长时间都没有软件更新是很常见的,我稍后会讲到这个。
既然你现在做的是更小更渐进的改变。你也可以更加自信,当你部署给你的用户时,你的版本不会崩溃,或者如果它崩溃了,你将能够更快地追踪到导致问题的原因,因为你将推动更新,最终持续部署是类似的,但它只是更进一步。部署步骤在持续交付中是自动化的,在更新发布之前仍然有一个手动质量检查。对某些人来说,这是一大步,它需要对你所构建的系统有很大的信任,但就我个人而言,我也非常喜欢自动化部署,因为对于现代的DevOps管道来说,这意味着你和工程师要尽可能地高效,人的参与必须在我们可以的地方被移除。我大概有40%的演讲都在说这一点,但人类真的非常不擅长重复的任务,在重复做一遍又一遍的琐碎任务时,我们能做得多好就有一个坚硬的天花板。我们很容易感到无聊,我们会分心,也许有人只是今天过得很糟糕,或者他们不吃早餐或其他什么,他们没有百分之百地工作,我们也非常非常非常慢。这就像,所有正常人都会犯错误。但电脑不会感到无聊或分心,速度也不慢。如果你编写了良好的全面测试,并将所有事情自动化,那么除了你最终肯定会部署一个糟糕的更新之外,无论是否有人参与按那个绿色的大按钮,你都会有更好的一天。这里最重要的是你能多快地回应和纠正错误的更新。 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还是USB驱动器。
我最后一次做这个是在2009年,感觉不是很久以前,但我想是更新软件为我工作的音像店,他们依靠这个应用程序来运行。它很旧了,需要更新,实际上在2009年,供应商不得不通过蜗牛邮寄给我一个u盘。
不,他们不会把可执行文件发邮件给我。是的,我问了,他们真的不会这么做。
在他们的辩护中,我猜这个特殊的应用程序仍然需要一个带有串行端口的机器,在那个时候,串行端口已经越来越不常见了就像你可以用百思买的零件制造的那种机器,因为它。许可证认证是通过验证物理软件狗的存在,只通过串行连接。你们中的一些人,可能比我年轻,甚至不知道串行端口是什么样子。需要明确的是,有些事情仍然以这种方式工作,但在少数行业之外是非常罕见的,在这些行业中,仍然是这样。遗憾的是,最好的方式。
手机也遇到过类似的问题,早在90年代,还没有办法更新手机软件,让你决定买新手机时变得像蛇一样。
最终,手机确实变得更智能了,但更新仍然需要手机插电,云存储还没有真正实现,所以当你升级到新手机时,数据传输是通过物理线缆完成的。这也是在不远的过去,我上一次不得不这么做是在我从带有谷歌Pixel的三星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动作。让我们来看看里面到底发生了什么。
叫做Sample workflow,非常小。只是为了演示的目的。
但它处理了很多我们通常需要手动处理的东西这些的语法非常简单。
它首先为我设置JFrog COI。通过这种方式,我可以与Artifactory对话,它是我所有包当前存储的地方,配置它与我的Artifactory实例对话。
然后它会做一些需要大量手工操作的事情。首先,它通过Docker登录,这样它就可以构建我的Docker容器,只有一行Docker文件,
然后它会把带标签的构建推回Artifactory,我很快会向你展示它在那里的生活。它还会为我收集一些环境变量,并将其打包成我们所谓的构建信息,它会给你一些额外的元数据比如构建中发生了什么事情的上下文,所以它更容易跟踪,比如发生了什么,被推广了什么。什么是失败,这类事情。就我个人而言,我有点过分了,我需要知道账单上可能发生的所有事情,所以这是我非常非常非常喜欢把它作为我的CI的一部分。
然后它将构建信息发布回Artifactory。让我们看看实际的工作流,这样您就可以看到其中一个是什么样子的。GitHub动作的工作方式是在回购中有一个简单的目录比如这个隐藏文件夹叫。GitHub。在这里面,有一个叫做工作流的文件夹。
这只是一个示例工作流,但是如果您以前从未见过YAML,那么这就是它的样子。它是非常容易读的,非常容易读,看一眼就知道发生了什么。一般来说,它很容易写。你可能会遇到一些问题比如制表符和空格但你只要在编辑器中使用YAML linter就可以了。但我们给了它一个名称样例工作流,就是你们之前在Actions下看到的,当我点击。我们首先定义,比如当动作,我们会运行这是我之前讲过的触发器。在本例中,每当有东西被推到我的主分支,或者每当对主分支打开一个拉请求时,它就会触发。我们之前看到,因为我从我的开发分支打开了一个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系统的一部分可能会防止Equifax灾难的事情,这是一种,令人难以思考的事情但它真的非常非常重要,试着自动化尽可能多的这些事情,因为你和你的工程师,你没有时间,精力,资源来手动做所有这些事情你应该做的那么频繁。2022世界杯阿根廷预选赛赛程
最好是花时间学习如何使用这些工具之一,学习如何声明YAML管道并让它为您处理测试、构建、漏洞检测和部署,以及所有这些,而不是让别人重复地手动完成这些工作。一开始学习如何做到这一点确实需要花点功夫,但从长远来看,这确实会为你节省很多时间。我希望你们都能尝试一下。但如果你想自己尝试,你可以注册JFrog平台的免费版本,可以获得Artifactory和X射线。这样你就有了一个地方来存储所有的包,所有的构建,几乎所有你可以使用的东西因为还有一个通用的存储库类型。
如果你正在使用我们不明确支持的东西,然后设置GitHub动作。如果你没有企业平台账户如果你使用的是免费层,那就用GitHub动作试试,看看你是否喜欢如果你想去看看这个仓库cat cause Grove slash DevOps Dash 101 Dash workshop,你甚至可以复制我的工作流程样本自己试试,看看效果如何,你需要填一些空白,但里面有说明,
这里有很多文档可以帮助你完成如果你想尝试,比如亲自动手如果你去CIC模块。这里有各种各样的说明,希望能让你比在网上盲目搜索更容易一些。
所以,总结一下,就像,我在高中写一篇研究论文。ICD是方法论和工具的结合,其最终目标是通过自动化诸如构建、测试和部署等事情来提高开发人员的速度和效率,这样您就可以更经常地完成所有这些事情,而不是花费大量的时间手工完成它们。
对您的好处是更频繁的软件发布,更早地检测到bug和漏洞问题,而糟糕的版本进入生产的频率更低。
有一些工具可以帮助你实现这个目标,从免费模式的东西,如GitHub动作或Travis或circle CI,到带有一堆附加功能的企业规模的工具,如JFrog管道。
我希望我已经帮助您理解了C ICD是什么以及它为您做了什么。
如果你还不明白。这也没什么,这是一个大问题,有些问题还在不断变化,在过去的三年里发生了很多变化,可能还会持续一段时间。如果你想联系到我,你可以在推特上,Dixie sweet flatline上,通过电子邮件和JFrog上。如果你喜欢领英,我的领英也在这张幻灯片上,所以我不怎么用。它就在那里。
让我们看一些问题。
