上一篇文章介绍了阿里云云效Testhub——测试管理模块的使用,这篇文章将对阿里云云效中的流水线功能模块做详细的介绍和使用说明。
(一)什么是流水线
我们先来举个日常的例子,例如疫情期间生产口罩的工厂流水线,不管是小作坊还是大企业,流水线上的每一个人或生产单位(机器)只专注处理某一个片段的工作,以提高工作效率及产量。
口罩生产流水线经历的步骤(机器完成):
1)将三层无纺布原料经过机器叠合在一起
2)卷边,把鼻夹缝合进去
3)将大片无纺布沿着斜面由左到右逐渐变窄做出“折叠结构”
4)压片:把口罩表面压平整
5)口罩的全自动单个裁断和缝边
6)再用无纺布,对口罩进行补边处理
7)再次裁断补边
8)通过热压的方式,固定挂耳绳
9)最后通过质检,杀菌消毒后包装成品
当然上面是通过制作口罩相关的机器来执行这些流程,如果是小作坊,都是人工手工干的活,最终是能完成这些工作,但是容易出错,速度又慢,所以现在的大型口罩生产企业,往往先把制作口罩的流水线配置好,制定好规则,然后交给机器去完成,这样不仅速度快,节省人员成本和时间,而且不容易出错,又能提高生产效率。
软件项目也是一个庞大的工程,产品人员撰写需求,开发人员编写代码,测试人员测试代码,运维人员配置环境,上传代码并部署,这个过程涉及的人员很多,流程也很繁琐,出错是很正常的,这样不但会影响到交付进度,也会影响到软件项目最终的质量。
记得之前看过《人月神话》一书,文中提到的,“猛犸兽”再厉害,碰到“焦油坑”,也是无能为力,那么如何来规避这些问题和风险呢?其实和口罩生产流水线一样,可以在人工的基础上增加自动化的操作来提高工作效率,我们可以使用阿里云云效流水线Flow产品,来帮助软件开发企业实现一系列自动化的操作,提高软件开发的效率。
引用阿里云官网的说明:「流水线」,又名「Flow」,是「云效」产品矩阵中一款企业级、自动化的研发交付流水线, 提供灵活易用的持续集成、持续验证、 持续发布功能,帮助企业高质量、高效率的交付业务。
流水线是持续交付的载体,通过构建自动化、集成自动化、验证自动化、部署自动化,完成从开发到上线过程的持续交付。通过持续向团队提供及时反馈,让交付过程高效顺畅。
(二)如何使用流水线
流水线是「Flow」提供的自定义流程编排工具,通过构建,部署,测试,管控等组件化能力,把从开发到交付的各项工作串联起来,从而让企业轻松的实现持续交付 。
1)打开云效Flow,默认展示已创建的流水线的界面,没有创建的话是空的,左边展示了三块内容:流水线根据分类展示,企业管理设置,企业设置,要使用流水线,先要完成企业设置(这个比较简单,这里不介绍了)。
2)创建流水线,可以从流水线模板中选择一个,也可以自己单独创建模板。
这里先演示一个最简单的模板——Java构建、部署到阿里云ECS/自有主机,后面文章将陆续介绍其他一些流水线流程。
3)进行流水线的配置,这步很重要,配置成功,才能确保最后运行成功。
选择第一个Java模板,点击创建后,需要配置3步:
1、代码源
代码源可以从云效 Codeup、阿里云 Code、自建 Git、码云 Gitee、Gitlab 公有云、Github 公有云、Github 企业版、Bitbucket、Coding这些里面上传,也可以配置Jenkins,或者使用其他已配置的流水线来获取。
a)使用云效Codeup获取代码源
选择代码仓库,默认分支,可以开启代码源触发功能,流水线会自动添加Webhook功能
b)使用Github获取代码源
绑定Github账号,然后选择命名空间,仓库及默认分支即可,也是相当的方便。
开启代码源触发,需要在Github所对应的项目的设置中,添加Webhook才能生效。
步骤:
a.Github 的代码库地址,在代码库 --> Settings (设置) ---> Webhooks中,点击 Add Webhook
b.将 Flow 流水线上复制的 WebHook 地址,填入 Payload URL
c.将 Content Type 选择为 “application/json”
3)从Jenkis获取代码源
Jenkis也是一款DevOps平台,之前公司也一直在使用,一键构建项目到测试环境还是很方便的,阿里云云效Flow同时也支持从Jenkis获取代码源,输入Jenkis地址,用户名和密码,点击绑定即可。
如果出现连接不上的情况,提示“Fail access jenkins by credential please check configuration(1900001)”错误,那就设置让Jenkis能外网访问到。
然后就可以选择Jenkis中的Job名称和默认版本。
4)从其他Flow流水线中获取
也支持从其他的流水线中获取代码源,选择之前创建的流水线,然后选择默认版本即可,也可以监听源流水线事件触发。
2、构建上传
本示例中,我们还是选择从阿里云CodeUp中获取代码源的方式,然后再进行第二步构建上传的配置。
构建上传涉及配置的内容还挺多的,有构建集群、任务步骤(可自定义)、任务插件等。
1)构建名称:按照自己喜欢随意输入
2)构建集群
可以选择云效提供的集群,也可以自己搭建构建集群。
云效提供了北京和香港两个构建集群,可以根据部署项目的地理位置来优先选择;自己搭建构建集群,可以通过 构建集群管理 -> 新建构建集群,开始创建自有构建集群。
构建集群的机器要符合以下内容:
支持的 OS 类型:Linux;
推荐配置:4 核 8G 或以上;
安装并启动 Docker Daemon:https://docs.docker.com/engine/install/;
验证 Docker 运行状态:在主机上执行命令 sudo docker ps; echo $?,输出应该为 0。
3)任务步骤
默认任务步骤有两个,一个是 Java构建,另一个是 构建物上传,还可以添加另外一些步骤,我们这里暂时先介绍默认的两个步骤,后续文章再增加其他步骤的配置介绍。
a)Java 构建
填入构建名称,选择项目所需JDK编译的版本,最后输入构建命令即可,很方便。
b)构建物上传
输入构建物步骤名称,输入制品名称,关键是打包路径,一个要指定打包出来的jar文件放在哪里,第二个要指定一个deploy.sh的脚步文件,路径很关键请结合实际项目来输入,有问题,评论留言沟通,路径的jar文件和脚本文件都将在第三步用于主机部署时候用,千万不要弄错,否则影响部署的成功。
c)任务插件
支持3种方式:钉钉机器人通知插件、邮件通知和Webhook通知插件。
这里我们选择钉钉机器人通知插件,首先要在钉钉中创建一个群,然后在群设置中配置钉钉机器人。
钉钉机器人添加成功后,把Webhook地址复制下来,粘贴过来。
设置运行的时机,可以选择成功、失败、取消、跳过及等待执行5种状态的通知。
邮件通知方式设置也很简单,只要输入邮件地址即可,同样选择运行时机,就可以把不同状态通过邮件推送过来;
Webhook通知插件设置需要输入 Webhook 地址和选择运行时机。注意 Webhook 地址必须公网可访问。
Flow 发送的 Webhook 请求一律为 Post 请求,任务状态信息的 Payload 示例如下。
3、主机部署
最后一步就是主机部署,主要有部署的主机组需要设置,填入部署脚本,设定部署策略及任务插件等步骤。
1)主机组配置
输入任务名称,选择上一步构建并上传的制品,选择新建主机组,可以通过阿里云ECS或者自有主机来操作。本例中使用阿里云ECS自有主机。
2)部署配置
下载路径是上一步设置好的,默认构建上传后名称为package.tgz,执行用户如果不是root,也可以用自己设置的用户,关键又要执行权限,最重要的就是部署脚本:
mkdir -p /home/admin/coinyee-nlf-api-1.0.0 创建一个目录
tar zxvf /home/admin/app/package.tgz -C /home/admin/coinyee-nlf-api-1.0.0/ 解压上传的package.tgz到指定目录
sh /home/admin/coinyee-nlf-api-1.0.0/coinyee-nlf-api/src/main/deploy.sh restart 执行之前上传配置好的deploy.sh 脚本
如果部署脚本有错误,那边执行过程会出现失败并提示错误信息,如果正确,那就一路绿灯。
3)部署策略
部署任务中,可以指定对应的部署策略。
部署方式:指定是否要发布一个批次后暂停,用于验证部署服务的可用性
分批数量:指定主机分批的数量,指定分批发布的数量,会按照相应的数量进行分批部署。
真实的上线过程,如果采用全量发布,会给开发运维团队带来未知的风险,为了减少发布对线上业务的影响, 云效流水线 提供了灰度发布,分批发布能力,最大限度的避免了不稳定发布对用户的影响, 保障业务交付的稳定。
4)任务插件
任务插件和上一步的Java构建上传基本一样,这里就不再重复了。
4、开始执行
完成以上配置后,一条最简单的流水线就完成了,然后就可以点击执行流水线了,每个步骤及流程,流水线上都一清二楚的呈现在你眼前,如果有错误也能看到错误信息,具体到问题内容。
修复问题后,再次点击执行,直到提示执行成功为止。
可以查看部署详情,包括:部署单和部署日志。
总结
以上篇幅介绍了一个最简单云效流水线Flow的创建->配置->运行过程,是不是很方便,很easy,我个人感觉比Jenkins要好,赶紧来体验一下吧!下一篇文章针对流水线中其他的配置例如:代码扫描、测试、镜像构建等进行讲解。