近日,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 工具:https://github.com/Serverless-Devs/cicd,如 Jenkins、Github、Gitlab 等,但应用这些传统的 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 的摸索,欢送大家关注咱们的开源地址:https://github.com/Serverless-Devs/serverless-cd。Serverless-cd 刚刚开源,还有大量的细节和工作,期待与更多开发者一起共建 Serevrless 生态,让开发者能够心无旁骛的专一业务开发和价值发明。
PS: Serverless 给前端带来了一片簇新的天地,笔者是一名前端开发者同学,在此呐喊更多前端同学能够一起共建 Serverless 生态
更多内容关注 Serverless 微信公众号(ID:serverlessdevs),会集 Serverless 技术最全内容,定期举办 Serverless 流动、直播,用户最佳实际。