00:04
大家好,我是腾讯云coding的解决方案架构师终极翁,接下来我会在coding DES平台上给大家演示持续集成的相关功能。为了让大家看得更清晰,我会将页面适当放大一些。现在正式开始我们今天的演示内容。首先我们需要创建一个样例项目,具体操作方式如下,先点击左边菜单中的项目,然后点击右上角的创建项目按钮。选择全功能de boss项目。我们可以给这个项目设置一个名字,就叫STEM。然后点击完成创建。创建完这个样类项目以后,我们还需要创建一个dock类型的制品仓库,这个dock仓库主要用于后面的功能演示。
01:07
创建制品仓库的操作方式如下,先点击左边菜单中的制品管理,选择制品仓库。然后点击右上角的创建制品仓库。在这个页面可以看到,Co目前支持多达11种仓库类型,涵盖了所有主流的仓库类型。我们现在需要创建的是一个dock类型的制品仓库,因此自律选择dock,名字就叫docker DEMO。点击下方的确认按钮。创建完制品仓库以后,我们就可以开始创建我们的持续集成流水线了。先点击左边菜单中的持续集成,然后选择构建计划。接着点击这里的创建构建计划。
02:03
在这里我们可以看到,系统已经为我们准备了非常丰富的模板,并且根据编程语言和功能的不同进行了分类。比如在编程语言这个分类下,我们提供了Java Python。6.js。狗。Do和PHP等所有主流编程语言的构建计划模板。根据功能的不同,我们也提供了大量的模板。比如,如果我们想要将制品上传到制品库,我们可以选择制品库这个分类。这里会有相应的模板,如果我们想要生成API文档,我们就可以选择API文档这个分类下的模板。这次我们要选择的模板是全部分类下。这个名为Java加spring加docker的模板。当我们点击完这个模板以后,系统就会自动为我们生成所有步骤的代码。
03:02
这里面包含几个关键的步骤。分别是单元测试、编译构建、构建docker镜像。推送到coding docker制品库以及部署到远端服务。其中,部署到远端服务这个阶段当前是被注释起来的,因为我们没有启用这个步骤。如果我们想要启用,只需要点击这个按钮即可,那么相应的代码就会被解除注释。这里面我们需要选择我们前面创建的制品仓库。这个docker制品仓库主要用来存储我们打包生成的docker镜像。确认各项配置信息无误以后,我们就可以点击下方的确定按钮,当我们点击确定按钮以后,将会自动触发构建。
04:00
这个时候我们已经完成了这条。流水线的创建,并且自动触发了构建。我们可以点击这里查看我们的执行状态。可以看到我们的流水线目前正在执行单元测试这个阶段,当我们点击执行校脚本,这里就可以看到具体的一个执行日志。在流水线执行的过程中,我们可以来查看一下这条流水线的一些基础配置信息,我们可以点击右上角的设置按钮。Coding的流水线,同时支持图形化和文本两种编辑模式。对于编程能力比较强的用户,我们可以在文本编辑器模式下。直接通过编写代码的方式来修改流水线。而对于没有编程基础的用户,我们可以切换到图形化编辑页面。在图形化编辑页面下,用户不需要编写任何的代码。
05:00
他们只需要在我们所提供的选择菜单中选择他们需要用到的功能,并将这些功能添加到合适的位置即可。当用户通过图形化编辑器完成流水线的配置以后,系统就会自动生成对应的代码。换言之,我们的流水线的每一步都会以代码的形式进行存储,从而实现我们所说的流水线记代码。Coding所提供的图形化编辑器极大的降低了编写流水线的技术门槛,使得没有编程基础的用户也能完成复杂流水线的编写工作。
06:00
接下来我们来看看这个流水线的一些基础信息。在基础信息这个页面,我们可以看到coding的持续集成流水线,除了支持coding自带的代码仓库以外,还支持各种主流的代码源,例如com com私有。马云、工蜂以及通用的。仓库等等。在节点池配置这里,我们也可以看到,扣点默认会提供上海、香港和硅谷这三个地域的云服务器,供用户选择来执行流水线。大家都知道,很多时候,当我们使用国内的服务器去拉取海外的一些资源,比如ma项目的依赖或者是dock镜像的,往往速度会比较慢,甚至还可能会因为网络限制而拉取失败。借助库林所提供的海外节点,我们就能完美的解决这个问题,从而提高我们的构建速度和工作效率。
07:00
当我们将鼠标全停在团队cii构建配额信息上面,就可以看到库所提供的云主机的一些配额信息。从这个弹窗可以看出,Coding所提供的云主机所搭载的是乌班图操作系统,配备八核CPU、16G内存和100G的磁盘空间。值得一提的是,Coding所提供的云主机默认就安装了大量主流的SDK和命令和工具,避免了用户自行安装的麻烦。我们可以前往coding的帮助中心来查看这些预装工具的详细信息。这些就是预装到coding服务器的SDK和命令行工具的一个详细列表。如果coding所提供的这些云主机不能满足我们的需求时,我们还可以添加我们的自己的服务器作为自定义构建节点来执行构建任务。由于时间关系,这里就不做演示了,大家有需要的话可以查看我们相关的一个帮助文档。
08:06
我们再来看一下这个流水线的触发规则。扣点的流水线支持多种触发机制,比如当代码被推送到指定分支时,自动触发流水线。或者是当用户创建合并请求时自动触发流水线,除了这些跟代码变更相关的触发机制以外,我们还支持定时触发和API触发。在传统模式下。当我们想要测试某项功能时,往往需要将代码提交到集成分支,然后通过持续集成流水线将集成分支上的代码部署到我们的测试环境。当我们的项目规模比较大时,完成一次部署任务往往需要比较长的等待时间,如果我们在工作时间段内进行这类操作,就会造成时间的浪费。更理想的一种状态是,我们可以设置一个定时触发器,在每天下班后的某个时间点自动触发流水线,将集成分支上的代码部署到我们的测试环境。
09:07
那么第二天早上,当我们来到公司上班时,就可以在已经部署好的环境上面直接开展测试工作,而不用浪费大量的宝贵时间去等待部署任务的完成。至于API触发机制,则可以方便我们通过命令或者是通过程序调用API的方式去触发我们的构建流水线,而不用每次都登录到我们的web页面去手动启动我们的流水线。接下来,我们再来看看coding持续集成模块所提供的变量与缓存功能。在流程环境变量这里,我们可以通过可视化界面。很方便的去为我们的流水线添加环境变量,我们还可以对这些环境变量进行加密处理。当我们将这个保密选项勾选以后,在我们的构建日志中,这个变量的值将会以星号进行显示,从而避免我们的敏感信息被泄露。
10:04
除了环境变量以外,我们还支持缓存目录功能。开启缓存可以避免每次构建都重复下载相同的依赖文件,从而大幅提升我们的构建速度,缩短我们的构建时间。比如,如果我们当前的项目属于ma项目,那么我们就可以将ma这个选项进行勾选,勾选完以后,我们的流水线只会在首次执行时才会去拉取这些内文依赖,后续的其他构件都直接使用那些已经缓存好的依赖,而不是重复拉取相同的依赖。除了Mar gid和MPM项目以外,我们还支持doc镜像的缓存,感兴趣的小伙伴可以参考我们在帮助中心给出的例子进行相应的配置。这就是我们缓存docker镜像的方法。首先我们会设置一个缓存目录,然后添加一个步骤,判断这个目录是否存在,如果存在的话,我们就会使用do low命令去加载已经缓存好的镜像。
11:08
在流水线的末尾处。我们还会添加一个步骤,这个步骤只会在这个流水线第一次执行的时候执行,目的就是将我们已经拉取下来这个镜像缓存到我们前面创建好的缓存目录,供我们下一次执行流水线的时候使用。当然,我们还需要在缓存这里将我们前面创建的缓存目录添加进来,这样我们的系统才会自动将这个目录的内容缓存下来。我们的流水线应该已经执行完了,我们一起来看看执行结果。从这里可以看到,我们的流水线执行成功了,用时一分八秒。当我们点击某个步骤时,在右边的弹出窗口就会显示这个步骤的一个详细的执行日志,其中一个步骤是收集J测试报告,这个报告在上方的这个测试报告这里可以查看。
12:08
从这个报告可以看出,我们一共有三条测试用例,并且全部执行成功,通过率为100%。这里面显示的是每个测试用力所对应的类和方法。我们再看一下这个流水线的一个详细的构建过程。这个流水线的最后一个步骤是推送docker镜像到coding的制品仓库,并且执行成功了。我们现在就去对应的制品仓库去查看一下这个端口镜像,我们依次点击左边菜单中的制品管理制品仓库。然后点击仓库管理。选择我们前面创建的那个docker制品仓库。在镜像列表这里面可以看到这里有一个docker镜像,这个docker镜像就是我们的CI流水线推送上来的。
13:01
当我们点击这一个镜像时,就可以查看这个镜像的一个详细的信息。其中在镜像历史这里面,我们还可以看到这个镜像每一层所执行的命令。在右边会有它的一个版本信息。这就是coding持续集成流水线的基本功能的一个简单演示。接下来我们会对这条流水线进行改造,演示如何借助coding的代码审核功能来实现安全转移和质量稳定,从而提高我们代码的质量和系统的安全性。我们先回到我们的持续集成流水线。点击流程配置。在我们单元测试这个阶段后面CC加号。新增一个阶段。要执行代码扫描。然后点击这个阶段下面的加号。
14:03
在弹出菜单中选择质量管理下面的代码扫描。在扫描方案这里面选择通过模板创建。然后选择Java。将门禁。的开关打开。并将警告问题这个对应的门禁阈值设置为一。并将其打开。然后将质量门禁不通过时终止构建这个选项勾选上。点击保存。为了节省时间,我们现在暂时先将单元测试这个阶段删除。在搞车。然后点击立即构建。我们可以点击这里查看当前的一个执行状态。
15:03
目前我们的流水线已经完成了代码的检出,正在执行代码扫描,我们点击这里就可以查看详细的一个。执行日志。好,正如我们所期待的那样,这条流水线执行失败了,原因在于代码扫描的结果没有通过我们设置的质量门禁,因此这条流水线被终止。借助coding提供的代码扫描功能,我们可以在持续集成的过程中对代码进行持续扫描,尽早发现问题,实现安全转移,提高我们系统的安全性。通过设置质量文件。我们可以避免有问题的代码合并到我们的主干分支,从而持续提高我们代码的质量。在这个样例的基础上,我们又结合扣顶所提供的消息通知插件,配置了另一条功能更强大的样例流水线。
16:01
在这个样例流水线中,我们借助coding所提供的消息通知插件,可以实时的将代码扫描结果发送到相关的企业微信群,缩短反馈周期,让相关的责任人可以及时处理相关问题。治疗流水线的第一个阶段是代码检出,然后第二个阶段是执行代码扫描,第三个阶段就是将我们代码扫描的报告发送到我们的企业微信群。在发送代码扫描报告这个阶段,我们会执行一系列的脚本。对我们的代码扫描结果进行解析,并提取关键的信息发送到相关的企业微信群。发送消息到企业微信群的一个具体的实现步骤如下,首先我们需要点击这个加号,然后在我们的弹出菜单中选择消息通知,然后点击发送企业微信机器人消息。
17:00
这里我们需要填入一个机器人ID,这个机器人ID就是我们企业微信群里面的机器人的ID。我们可以找到一个群,然后点击上面的三个点,然后点击添加群机器人。添加新机器人。然后随便起一个名字,比如coding。然后点击添加机器人。然后我们需要拷贝这个URL。拷贝完URL以后,我们把它粘贴到这里来,并且把前面的内容都删掉,只保留T等于后面的内容。然后消息内容这里面就可以填写我们的一些具体的信息。然后消息类型这里面。填入,选择markdown。我们看一下我们已经写好的一个例子。这里面就是我们消息内容的一个模板。我们支持那语法可以对这些信息进行加粗,也可以对这些文字。
18:06
加一些样式。这里面的Dollar符号加大括号里面的就是我们的一些变量的名字。我们可以切换到文本编辑器模式,看看这些环境变量都是怎么生成的。从这里可以看到,我们前面所提到的那些环境变量其实都是通过解析我们代码扫描的结果生成的。在这里我们使用到了一款名为JQ的Linux工具来处理我们的J选数据,并从我们的代码扫描结果中提取出关键的数据,并将其存储到我们的环境变量中去。然后在我们发送消息的时候,我们就可以通过多符号加大括号的方式来引用这些环境变量了。值得一提的是,我们在这里还增加了一段小的脚本。用来判断我们代码扫描的结果是否通过了我们设置了质量门禁,如果没有通过质量门禁的话,我们就会终止当前的流水线。
19:08
现在我们一起来执行一下这条流水线,并查看一下它的执行效果。目前我们的流水线已经执行完毕了,跟前面的流水线一样,我们的代码扫描也是没有通过质量门禁,但是我们的这一条流水线并没有马上终止执行,而是对代码扫描镜的结果进行了分析,并将关键信息发送到我们的企业微信群。这就是我们企业微信群收到的消息。从这里我们也可以看得到代码的提交者、新增问题的个数、未修复问题的个数和代码版本号等信息。这样一来,我们就可以实时了解团队中每个开发人员都引入了哪些代码质量问题,并实时掌握这些问题的处理进度等,从而推动相关的责任人尽早解决问题。
20:16
接下来我们再来看看另外一条样的流水线。在我们的这一条让利流水线中,我们将会集成第三方的开源工具telephone,从而实现infrastructure。我们可以点击上方的这一个。链接。跳转到我们对应的代码仓库。在我们的代码仓库的根目录下,有一个名为may.tf的文件,这个文件就是telephone的脚本文件。我们的这个脚本文件主要分为三大部分的内容。这一部分是声明我们的provider。
21:02
也就是我们的云服务供应商,这里面我们选取的是腾讯云,因此我们填的是ten cloud。第二部分是获取一些云资源相关的信息,例如可用区、可用镜像和可用的实例类型等。第三部分就是说明我们想要创建的一些云资源,比如这里我们是要创建一个云服务器。这里表示要创建一个安全组。这里则表示要创建一个安全组的规则,我们再回去看看我们的流水线。从构建过程这里可以看到,我们这条流水线的第一个阶段是检出代码,其实就是去拉取刚刚那个代码仓库里面的telephone脚本文件。第二个阶段是安装telephone这款工具。
22:00
第三个阶段是执行命令。S将我们将要创建的资源罗列出来。这个时候我们可以从日志信息里面去检查这些资源是否正确。当我们确认无误以后,我们就可以在人工确认这个阶段点击确认,确认完毕以后,我们的流水线就会执行命令。在腾讯云上创建那些我们声明好的资源。在执行这条流水线之前,我们先登录到我们的腾讯云控制台,看看我们当前都有哪些云资源,我们先来看一看我们的实力。我们当前选择的地域是中国香港,可以看到在这个地域下,当前我们是没有任何的服务器资源的。我们再来看一看我们的安全组。
23:00
我们同样选择了中国香港这个地域,在这个地域下,默认只有一个叫default的安全组。创建时间是2019年。然后我们现在再来执行一下我们的流水线。我们可以点击这里。查看我们的一个构建程。可以看到,当前我们的流水线已经完成了代码的检出。正在安装。现在已经安装完毕。目前正在执行令。好,Telephone plan命令已经执行完毕。进入了人工确认的阶段。我们可以回到telephone这个步骤,点击这个脚本,这里就可以看得到。我们将要创建的云资源。当我们确认无误以后,我们就可以在。
24:03
人工确认这个阶段点击确认按钮。当我们审批成功以后。我们的流水线就会执行telephone。去创建相应的资源,这个时候我们可以来刷新一下。可以看到,在中国香港这个地域下,我们有一个服务器正在创建中。然后我们再去看一下安全组。可以看到里面会多了一条安全组。名称叫web access,确认时间就是当前的时间。这个其实就是我们在telephone脚本文件里面声明的一个安全的资源。
25:00
这表明我们的流水线已经成功的为我们创建了相应的实力和安全组。这个时候,我们又一次进入到了人工确认的阶段。这一个确认阶段是。确认我们是否要销毁?已经创建好的资源。我们再看一下我们的当前的状态。我们的实力是运行中。然后有两个安全组。那么我再点击确认。确认完毕以后,我们的流水线就会进入到。下一个阶段,执行命令,将我们的资源进行销毁。我们来查看一下。可以看到,我们刚刚创建完的资源现在已经没有了,已经被销毁了。这表明我们的流水线已经执行成功。
26:05
这就是我们infrastructure库的一个简单演示。接下来我们将会在infrastructure s code的基础上实现policy s Co。为了实现policy s Co,我们需要在集成一款名为checkkoff。的开源工具。checkoff是一款针对基础设施记代码的静态代码分析工具,这款工具内置了丰富的策略来检查常见的错误配置问题,同时还支持自定义策略。借助check off,我们可以快速检测出telephone to和其他基础设施记代码工具中那些可能导致安全化、合规性问题的错误配置,从而提高我们系统的安全性。现在我们一起来看一看一个简单的样例流水线。在构建过程这里可以看到,这条让利流水线其实跟我们前面那条样例流水线很像,很多步骤都是一样的,不同之处在于这一条样例流水线多了两个额外的步骤,一个是安装check off这款工具。
27:15
另外一个就是使用check off这款工具去扫描telephone的配置文件。值得一提的是,这条流水线跟前面那条流水线一样,使用的都是同一个代码仓库,不同之处在于,这条流水线会比前面那条流水线多使用一个文件。在这个代码仓库的根部下,可以看到除了点DF这一个telephone的配置文件以外,还有一个名为custom的文件夹,这个文件夹就是我们用来存储checkoff自定义规则的地方。点开这个文件夹,可以看到里面有一个tension cloud custom po的样文件。我们在这个样本文件里面定义了一个自定义的规则,用来检查系统磁盘的存储空间是否大于或等于100GB。如果我们在创建云服务器资源的时候,设置的系统磁盘的存储空间小于100GB的话,就会被认为违反了我们添加的这条自定义策略。
28:19
我们再来看看这个MTF文件。在create a web server这里,我们添加了一个resource,用来添加一个云服务器。如果我们仔细观察,就会发现,在system size这里,我们设定的值是50GB。这就违反了我们前面提到的那个自定义的策略,接下来我们就来看一看如何借助checkoff去自动检测出这个不合规的配置项。我们再回到我们的让利流水线页面,点击右上角的立即构建按钮。
29:04
我们可以点击这里查看我们流水线的执行情况。目前我们的流水线已经完成了代码的检出,已安装完了telephone,目前正在安装checkoff。在流水线构建的过程中,为了节省时间,我们先来想一想另外一个场景。前面已经提到过,Q点的持续集成流水线就是图形化编辑器,我们只要在弹出菜单中选择扣点内置的各种插件,就能完成几乎所有的任务。那么,如果扣所提供的插件不能满足我们的特殊需求时,我们又该怎么办呢?为了满足客户的各种使用场景,扣顶的持续集成模块在设计之初就将灵活性和可扩展性做我们产品设计的一个重要的目标点。流水线的灵活性和可扩展性体现在用户不光可以使用我们提供的官方插件,还可以开发自己的团队插件。
30:03
我们可以点击右上角的团队设置中心,再点击功能设置,在持续集成这里我们就可以看到有一个构建插件。里面会有我们官方的插件。同时我们也可以创建我们自己的团队件,待会我们就会演示如何开发一个团队插件。现在我们先回去看看我们流水线的一个执行情况。好,目前我们的流水线已经进入到了人工确认的阶段,我们可以先看一下前面一个步骤,前面一个步骤是扫描我们的telephone配置文件。从结果可以看到,这里fail了。那么我们就先点中止。好,我们已经终止这个构建计划了,我们再回去看一下我们的上一个阶段。
31:03
扫描telephone配置文件的这一个阶段。从日志信息这里面可以看到,有一个策略没有通过。而这一个策略正是我们前面提到过的那个制定的策略。在我们的这一条压力流水线中,当checkoff检测出不合规项以后,并没有马上终止,而是进入到了一个员工确认的阶段,这是因为我们在执行这里面加了一个杠S的参数。用于日志错误的返回代码。这么设计是因为有些违规线的影响其实不是很大,我们可以放心。因此我们没有必要马上终止流水线,而是应该通过员工确认的方式去判断该违规线是否可以放行。如果我们希望check off在检测出违规线就马上终止流水线的话,我们只需要将这个杠S参数去掉即可。由此可见,借助缺口,我们可以快速的检测出基础设施代码的配置文件中那些可能导致安全或合规性问题的错误配置,从而保证我们系统的安全性和合规性。
32:12
这就是如何在coding devs平台上实现po SQ的一个简单演示。现在我们就来讲解一下如何开发一个团队插件。由于时间关系,我们这里只会做一个简单的讲解,大家感兴趣的话可以参考我们帮助中心的相关文档。在我们帮助中心,我们可以找到持续集成模块,然后在自定义团队插件制下面就会有相关的文档,包括我们的一个产品介绍。以及我们的一个开发指引。同时我们还准备了一个样例的插件,我们这个代码仓库是开源的,大家可以把它克隆到本地进行参考学习。我们的插件包括两个核心文件,其中一个是名为QC in的样文件,这个文件是我们的插件格式声明文件名称是不可变的。另外一个就是我们用来实现功能的脚本文件。
33:12
接下来,就让我们来看一个具体的例子吧。首先,我们需要我们的这一个样例代码克隆到本地。这就是我本地的一个工作目录,这个名为CIDEMO的文件夹就是我们的一个样例代码。我们主要是要参考。这一个QC点样模文件。我们会把这一个CI in DEMO文件夹拷贝一份,并把它重命名为我们自己的一个自定义插件的名称。然后我们会以这个QC点压某文件作为我们的一个模板。并修改里面的内容。
34:02
比如我们会根据我们实际情况修改版本号以及插件ID,插件中文名称、插件描述、插件分类以及我们使用到的参数,还有插件的启动入口等等。接下来就是完成我们的一个功能的实现。我们会修改这个乱点PY文件里面的代码。从而实现我们想要实现的功能。提供了非常丰富的API,比如我们想要创建一个,我们就可以使这里面的样例。然后使我们的。这款API测试工具来进行测试,当我们测试通过以后,我们可以利用POS们的自动生成代码功能生成对应的一些脚本,然后我们可以把这些脚本内容。粘贴到我们的这一个脚本文件里面。
35:02
当我们编写完了这个脚本文件以及我们的这个QC in点文件以后,我们需要把我们的这一个文件夹压缩成一个shift保。然后登录到我们的扣顶平平台。我们点击右上角的团队设置中心,然后点击功能设置,再点击构建插件,然后点击新建构建插件,然后再选择文件界面,选择我们刚刚压缩好的shift文件。这样我们就完成了一个自定义插件的开发工作。大家如果想要了解Q点的更多功能的话,还可以访问Q点的官网Q点点ne,然后点击体验演示系统,进入到我们的公开演示系统。我们在这里为大家准备了非常丰富的样例数据,能够帮助大家更好的了解codings平台的使用方法。以上就是实操部分的全部内容,感谢大家的聆听。最后欢迎截图并微信扫码添加我们的coding官方小助手,加入coding公开课专属群聊,一起讨论技术,交流观点,了解扣顶,并获取本次课程的课件以及下次课程的通知,那么让我们下次课程再见。
我来说两句