作者:丹坤
近日,Serverless 开发者平台 Serverless Devs 重磅公布基于 Serverless 架构的轻量级 CI/CD 框架——Serverless-cd。Serverless-cd 是一款运行在 Serverless 架构上的功能强大而灵便,平安,低成本的 CI/CD 开源框架。该框架基于 Serverless Devs 开发者工具打造,通过 Serverless-cd 开发者能够疾速构建企业外部利用治理 PaaS 平台。
开发者更想关注业务价值的发明
Serverless Devs 是 CNCF 沙箱孵化我的项目,2020 年由阿里云开源,它是一个开源凋谢的 Serverless 开发者平台,Serverless Devs 也是业内首个反对支流 Serverless 服务 / 框架的云原生全生命周期治理的平台,致力于为开发者打造 Serverless 利用开发一站式服务,帮忙解决目前的工具链之困,让开发者一键体验多云产品,极速部署 Serverless 我的项目。
Serverless Devs 我的项目为利用的开发,调试,部署,运维,监控提供全生命周期的解决方案。在理论应用中,利用部署和交付对于开发者来说依然是一个难题。开发者心愿更专一于利用的开发和价值的发明——也就是关注代码编写和利用的构建,而非应用部署和交付。
在 Serverless-cd 我的项目公布之前,Serverless Devs 我的项目通过集成的形式,集成了支流的 CI/CD 工具,如 Jenkins、Github、Gitlab 等:
https://github.com/Serverless…
但应用这些传统的 CI/CD 工具个别会面临如下几个问题:
- 资源利用率低:须要提前准备构建机器,在没有构建工作时,机器资源节约;
- 工作排队:如果资源筹备不短缺,在业务构建的顶峰期间,工作排队工夫过长;
- 隔离性差:如果某个工作执行过程中耗费大量计算 / 存储资源,导致其余工作失败;
- 平安问题:
-
- 应用平台提供的 CICD 服务:代码和构建机器不在同一个网络环境,不得不凋谢公网拜访,引起平安问题。
- ECS 虚机部署:多个利用同时在一个实例构建,某个歹意利用能够拜访其余的利用的代码
CI/CD 流水线的 2 个特点
CI/CD 流水线有两个显著的特点:
- 事件驱动
无论是接管 Webhook 主动触发,还是调用 Open Api 手动触发,对于 CICD 零碎来说都是被动接管指令进行生产
- 业务显著波峰波谷
触发 CI/CD 构建的顶峰个别在下班的时间段中,上班后以及早晨构建工作比拟少。同时有些工作执行十分耗时,有些工作又须要大量的 CPU& 内存资源,很难提前进行无效的容量预估。
- 机器资源筹备过少:因为资源有余导致工作执行失败,或者多个工作进行资源抢占,始终无奈执行。
- 机器资源筹备过多:无奈充分利用,造成资源闲置节约。
基于 Serverless 架构的 CI/CD 劣势
在 Serverless 架构下,CI/CD 能够具备以下劣势
- 主动弹性
Serverless 平台会为每个构建任务分配一个全新的实例,保障每个工作之间互不影响。再也不必放心资源有余导致工作失败,也防止了因为资源有余导致工作始终排不上队的状况。
- 按价值付费
在业务波谷(早晨或者上班后)期,只有大量甚至没有工作执行,资源就呈现了闲置和节约。Serverless 的理念是帮忙客户按理论产生的价值付费,只有实实在在的产生了构建行为,才会产生费用。
- 免运维
Serverless 弹性是依照申请进行程度扩容的,开发者无需关注底层资源调度和运维的工作,能够心无旁骛的实现业务开发和价值发明。
Serverless-cd 技术架构
Serverless-cd 是齐全遵循 Serverless 架构最佳实际,在标准和生态层面参考 Github Action 的实现。上面是 Serverless-cd 部署 Serverless Devs 利用的一段 YAML:
name: "Deploy Express application to FC"
steps:
- run: npm i @serverless-devs/s -g --registry=https://registry.npmmirror.com
- run: s -v
- run: echo ${{secrets.ALIYUN_ACCOUNTID}}
- run: echo ${{secrets.ALIYUN_AK}}
- run: echo ${{secrets.ALIYUN_SK}}
- run: s config add --AccountID ${{secrets.ALIYUN_ACCOUNTID}} --AccessKeyID ${{secrets.SIMPLE_ALIYUN_AK}} --AccessKeySecret ${{secrets.SIMPLE_ALIYUN_SK}} -a default -f
- run: s deploy --use-local -y
Serverless-cd 采纳的是经典的 Master Worker 模型,采纳事件驱动的架构,整体的架构如下图:
触发形式
触发器承当事件驱动中的生产者的角色,Serveless-cd 临时提供了三种触发形式:
- 通过 Webhook 主动触发
开发者能够配置对应的触发条件:比方 Push 到 Master 分支,发动 Merge Request。这是一种十分麻利的开发和交付的形式。
- 通过 Open api 触发
Serverless-cd 平台的所有的能力都提供凋谢了 Open api。以便开发者更好的构建企业外部的 PaaS 平台。
- 通过 CLI 触发
从技术的角度来看 Serverless Devs 实质是一个 CLI 工作,提供了组件化的能力,所谓的组件化也就是通过热更新的机制,让开发者依据本人的需要进行拓展。Serverless-cd 通过自定义组件,让开发者能够通过通过命令行间接操作。
当然咱们也在打算接入更多的触发类型,比方 cloudevents 触发, 定时触发等
Serverless(FaaS) 平台
FaaS 平台是整个平台的外围局部,承当事件驱动中的消费者角色,采纳的是经典的 Master Worker 模型。
- Master Worker 模型在 Serverless 架构的劣势
传统的 Master Woker 部署,为了保障 Master 节点的高可用,须要部署三个节点搭配负载平衡以及健康检查,来保障 Master 节点高可用。在 Serverless 架构中,实例会依据申请主动弹性扩容,Master 节点人造具备高可用能力,无论在可靠性,还是灵活性都有较大的劣势
- Master 函数作用
Master 函数实质是一个 HTTP 类型函数,作为整体流量的入口,同时也是整个零碎的大脑,承当着十分重要职责。
- 平安保障
- 公网密钥校验
Master 裸露的 URL 地址是能够公网拜访的,为了防备歹意申请,Serverless-cd 零碎在下发 URL 的同时也会下发签名规定。如果是歹意的申请,就无奈通过校验,来保证系统的安全性 - VPC 绑定也反对绑定 VPC 环境,代码仓库和 serverless-cd 服务绑定在同一个 VPC 环境,通过 Webhook 触发。公网用户无奈间接拜访,从网络上保障了相对的平安
- 过滤申请
咱们每天在 Git Repository 会触发各种事件,比方新建 ISSUE,PUSH 代码,发动 Merge Request 等。这些动作都会通过 Webhook 触发,开发者能够配置规定过滤相干事件。上面是一个示例:代表在 GitHub 平台提交到 Master 的代码才会触发
triggers:
github:
events:
- eventName: "push"
filter: 'body.ref in ["refs/heads/master"]'
- 路由转发
Master 函数负责将申请分发给 Worker 函数,Worker 函数所有的行为都由 Master 函数管制
- Worker 函数作用
Worker 函数实质是一个事件(Event)函数,只和 Master 函数通信,惟一的职责是解决 Pipeline,能够长时间运行。
自定义 Pipeline
Serverless-cd 反对三种形式自定义 Pipeline:
- shell 脚本
shell 脚本是最容易了解也是应用最宽泛的
name: "shell example"
steps:
- run: echo Hello world
- zx 脚本
google/zx 容许开发者通过 javascript 语法来编写您的 Shell 脚本
name: "zx example"
steps:
- script: 'const listFile = await $`ls -la`; console.log(listFile)',
- 应用自定义利用(NPM Package)进行扩大
Serverless-cd 也反对封装通用的 NPM 包进行扩大:比方钉钉告诉,企业微信告诉,OSS 文件上传等通用能力,都能够通过自定义利用扩大。自定义利用实质是公布在 NPM 仓库的包。
name: "zx example"
steps:
- run: @serverless-cd/dingding
疾速体验
提前准备
Serverless-cd 部署齐全是基于云进行,依赖相干云产品也是 Serverless 化。
- 函数计算 FC:整个零碎的计算能力运行在 FC 上
- 日志服务 SLS:分布式日志存储服务,更好的定位和发现问题
- 对象存储 OSS:用于存储日志信息
- 表格存储 Tablestore: 利用和工作的云数据信息存储
本地部署
- 下载安装 Serverless Devs:npm install @serverlesss-devs -g(版本必须大于 2.1.7), 具体操作疏导请参考 Serverless Devs 装置文档
- 配置密匙信息:s config add, 具体操作疏导请参考配置阿里云秘钥
- 初始化我的项目:s init serverless-cd
- 进入我的项目并部署:cd serverless-cd && s deploy
Serverless-cd RoadMap
开源共建
Serverless-cd 是业界首个基于 Serverless 架构的 CI/CD 的摸索,欢送大家关注咱们的开源地址。Serverless-cd 刚刚开源,还有大量的细节和工作,期待与更多开发者一起共建 Serevrless 生态,让开发者能够心无旁骛的专一业务开发和价值发明。
PS: Serverless 给前端带来了一片簇新的天地,笔者是一名前端开发者同学,在此呐喊更多前端同学能够一起共建 Serverless 生态。
作者介绍
袁坤(花名:丹坤),阿里云智能云原生前端技术专家,Serverless Devs 开发者工具 maintainer
相干链接
[1] 事件驱动:
https://www.tibco.com/zh-hans…
*[2] cloudevents*
https://cloudevents.io/
*[3] google/zx*
https://github.com/google/zx
*[4] 函数计算 FC*
https://fcnext.console.aliyun…
*[5] 日志服务 SLS*
https://sls.console.aliyun.com/
*[6] 对象存储 OSS*
https://oss.console.aliyun.com/
*[7] 表格存储 Tablestore*
https://otsnext.console.aliyu…
*[8] Serverless Devs 装置文档 *
https://docs.serverless-devs….
*[9] 配置阿里云秘钥 *
https://docs.serverless-devs.com/serverless-devs/command/config#config-add-%E5%91%BD%E4%BB%A4
*[10] Serverless-cd*
https://github.com/Serverless…
*[11] 开源地址:*
https://github.com/Serverless…