00:00
大家好,我是大龄成员老杨,本节课我们以coding平台为例来讲解词语集成。如果软件开发过程中遇到这些问题,那需要学习词语集成。比如,大家直接提交代码的主干越来越乱,难以增加新功能。尝试口头传达代码规范,但没人执行。第二个问题,开发写完代码就丢给测试,导致bug多,没人敢改老代码。尝试统计签行bug率,然后怎么办呢?罚款其实没有用。还有就是项目越来越大,回归越来越久。或者每次发布都要手动打包,费时费力。持续集成,简称CI,它的定义是持续不断的把代码集成,也就是合并到主干,实现质量内建。从图中可以看出,主干被锁定。开发人员拉取小分支提交之后,经过中间虚线的部分,也就是持续集成系统进行编译测试生成产物。
01:02
通过以后,由同时进行code review,然后合并到主干。持续集成分为两种,SS或者自建。SAS很方便,打开网站就可以使用。比如2011年的yci。2019年,Co ne推出了CI github也推出了actions。自建就麻烦一点,需要购买服务器安装软件,比如2011年的 ins2012年的gilab CI。持续集成的前提是多分支开发。上面这个图是单兵作战的时代,一个人做一个项目,直接提交到主干问题不大。而下面是现在多人协作的时代。每个人做每件事都拉取小分支,然后合并进来。多分子开发如何强制落地?需要在代码仓库里设置保护分支。把主干也就是慢加入进来。由于master涉嫌种族歧视,国外开源项目普遍已经不用了,建议大家跟进一下。
02:06
注意,不只是主干需要保护,所有的公共分支都需要保护。比如develop也不允许直接提交。公共分支被保护了,大家都不能直接提交,那就要创建合并请求。可以看到图中指定了原分支、目标分支和评分者。多分支开发的时候,如何为分支命名?合并到哪里?这叫做get work flow。业界有多种方案,比如get up get flow,最后会单独开课讲解。不管是哪种工作流,口头传达是不可靠的,机器强制检查才可靠可点,研发规范实现这一点。从图中可以看到需求分支、缺陷分支的正则约束。右边是分支合并的约束,比如hot fix可以合并到主干,还有get tag的约束。合并请求创建之后等待同事评审。这时候,如果机器能先做一些检查工作,那可以节约评审的工作量,这就需要配置持续集成。
03:06
词语集中有这些主要用途。一检查代码规范。比如Java的star工具PPCSGS的Li。这个难度是两颗星,比较简单,但效果立竿见影,建议大家一定把这个功能用起来。第二单元测试,也就是白盒测试,这个难度很高,需要开发者学会写测试代码。之后会单独开课讲解。第三,提取API文档。这个难度也比较高,需要后端学会写注释,就可以自动提取变成网页文档供前端使用。最后一步,编译打包,这个最简单,很多公司都只用了这个功能。这是远远不够的。没能实现质量内建。建议大家把前面的功能用起来。要想使用coding词语集成,首先要进行创建。页面上提供了很多系统模板,比如Java Python。
04:03
也可以自定义团队模板,比如很多公司的Java项目使用同一个语言版本,比如JAVA17流程都一样,那可以使用同一个模板。然后配置词语,集成流水线。左边是Q提供的图形编辑器,方便初学者上手,在里面可以很方便的使用各种插件。点击之后会生成代码。熟悉了以后可以使用文本编辑器,从右边的图可以看到,就是把本地命令按照流水线代码的格式写进去。既然是代码,那就应该放在代码库里,和业务代码一起,每个开发同学都可以改进它。这就是文化流水线及代码。所以,持续集成的前提是熟练掌握命令。如果本地没有Linux环境,没跑过命令,那建议先学习,不要直接使用,持续继承,那更跑不通。在本地怎么配置代码规范?如果是Java项目,请看第一行代码。首先引入check style插件。
05:02
然后中间的代码是下载业界知名规范,放在代码库中。最后执行命令,可以看到检查出来很多错误。更多语言的配置方法会在别的视频中单独讲解。在本地怎么配置单元测试?各个语言的国际流行框架都集成了单元测试工具。由Java使用JA unit。开发同学直接在test目录写测试代码即可,最后执行命令。在本地怎么配置API注释?在各个语言的框架中引入12个3.0,也就是open API插件即可。然后按照它规定的格式写注释。配好了秩序,继承要执行的几个命令,然后什么时候执行呢?那就需要配置处罚规则。从左边可以看出。当推送到主干分支或tag时。当发起代码合并请求时,就会执行。不同的场景不是执行全部的步骤。常见的场景是。
06:00
合并请求时检查代码,规范运行单元测试。合并后运行单元测试,并且打包推送tag只打包。所以右下角的步骤中要进行判断,这里是判断了合并请求。持续集成。还需要配置构建机。客厅提供了几个地区的Linux云服务器,一般内地就够用了,如果在内地下载境外资源比较慢,还可以选择香港或者硅谷服务器。机器是在腾讯云上弹性创建的。构建完就销毁,确保代码安全。每个团队都有一定的免费额度。如果不够用,可以购买资源包。可以看出coin ss很方便。而如果是自建词语继承,那还需要准备额外的构建机,自己安装软件比较麻烦。最下面是自定义节点。如果有闲置的服务器或电脑,可以接入进来。支持Linux Windows Mac OS。开发者可以接入苹果电脑用来打包iOS,接入Windows电脑用来编译点net。
07:05
自定义节点,不需要独立外网IP,只要能上网即可。最上面是代码来源。除了coding自己的代码库,还支持其他厂商或自建的GI。刻定持续集成预装了一些软件,这里列出来一部分,比如语言有JAVA8 note js10 PP8。工具有Marvin3.6。虽然预装了语言,但不建议大家使用。因为语言版本变化很快,比如note gs10已经废弃了,说不定哪一天持续集成就升级到了14,老项目就跑不通了。如果一直不升级,迁就了项目,会有安全漏洞。而且导致新用户、新项目很不方便。所以建议大家精确指定自己需要的语言版本。有两种方式可以指定软件版本。左边是命令安装,比如w get ipd get。右边是docker,建议大家优先使用docker,除非有些项目不能在docker中构建。
08:03
配好了持续集成,在代码合并请求的时候就会强制检查。从图中可以看到,检查失败,代码不可以合并。打开持续集成页面,可以看出代码某一行不符合规范导致失败。如果开发同学写了完善的单元测试,有人改代码,导致词语中报错,立即会被发现。这样就可以放心大胆的改老代码了。这就是dells文化。开发,对代码正确性负责。应该写自测代码。把质量内建的开发阶段。而测试同学是负责黑河验收。它无法改变代码质量差的现状。持续集成报错就不可以合并代码,接着修改,重新推送,直到持续集成通过,然后由同事进行评审。发现一些机器无法发现的问题,比如设计模式。当人工评审也通过了,代码就可以合并了,这就实现了质量内建。
09:00
赤集团的产物放在哪里?用过Marvin n PM docker的同学都知道,官方有免费的开源仓库。也有收费的私有仓库。不过这样比较分散。用在一个一个的开源项目上没有问题,而公司有很多项目分散,难以管理。所以扣进这种集中式多元的制品库就很适合企业用户。它支持十多种制品。默认是私有的,也可以设置为团队共享或者公开。在词语集成流水线中加入几行代码,就可以推送到制品库。不过制品首先需要一个版本号,所以上面写了很多if判断。而下面几行,才是真正的构建和推送。除以集成打包的时候,根据不同的场景需要生成不同的版本号。比如代码推送时生成分支名加哈希的版本号。Tag推送时,直接使用tag做版本号,比如2.0.1,如果在流水线中做判断,就要写很多if else,别的项目想用就要复制代码。
10:03
这样违反了DIY不重复的开发原则,而且很不方便,所以需要想个办法。可以使用词语集中插件来解决这个问题。这个开源插件代码很简单,但可以供大家学习插件的写法。写好了插件,上传安装到固定团队插件中,整个团队都可以使用。
我来说两句