Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd
共 5522字,需浏览 12分钟
·
2022-11-21 14:00
开发者更想关注业务价值的创造
https://github.com/Serverless-Devs/cicd
但使用这些传统的 CI/CD 工具一般会面临如下几个问题:
使用平台提供的 CI/CD 服务:代码和构建机器不在同一个网络环境,不得不开放公网访问,引起安全问题。 ECS 虚机部署:多个应用同时在一个实例构建,某个恶意应用可以访问其他的应用的代码
CI/CD 流水线的 2 个特点
CI/CD 流水线有两个显著的特点:
事件驱动
无论是接收 Webhook 自动触发,还是调用 Open Api 手动触发,对于 CICD 系统来说都是被动接收指令进行消费。
业务明显波峰波谷
触发 CI/CD 构建的高峰一般在上班的时间段中,下班后以及晚上构建任务比较少。同时有些任务执行非常耗时,有些任务又需要大量的 CPU&内存资源,很难提前进行有效的容量预估。
机器资源准备过少:由于资源不足导致任务执行失败,或者多个任务进行资源抢占,一直无法执行。
机器资源准备过多:无法充分利用,造成资源闲置浪费。
基于 Serverless 架构的 CI/CD 优势
在 Serverless 架构下,CI/CD 可以具备以下优势:
自动弹性
Serverless 平台会为每个构建任务分配一个全新的实例,保证每个任务之间互不影响。再也不用担心资源不足导致任务失败,也避免了由于资源不足导致任务一直排不上队的情况。
按价值付费
在业务波谷(晚上或者下班后)期,只有少量甚至没有任务执行,资源就出现了闲置和浪费。Serverless 的理念是帮助客户按实际产生的价值付费,只有实实在在的发生了构建行为,才会产生费用。
免运维
Serverless 弹性是按照请求进行水平扩容的,开发者无需关注底层资源调度和运维的工作,可以心无旁骛的实现业务开发和价值创造。
Serverless-cd 技术架构
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
触发方式
通过 Webhook 自动触发
通过 Open api 触发
通过 CLI 触发
Serverless(FaaS) 平台
Master Worker 模型在 Serverless 架构的优势
Master 函数作用
1.安全保障
公网密钥校验
Master 暴露的 URL 地址是可以公网访问的,为了防范恶意请求,serverless-cd 系统在下发 URL 的同时也会下发签名规则。如果是恶意的请求,就无法通过校验,来保证系统的安全性。VPC 绑定 也支持绑定 VPC 环境,代码仓库和 Serverless-cd 服务绑定在同一个 VPC 环境,通过 Webhook 触发。公网用户无法直接访问,从网络上保证了绝对的安全。
过滤请求
triggers:
github:
events:
- eventName: "push"
filter: 'body.ref in ["refs/heads/master"]'
路由转发
Worker 函数作用
自定义 Pipeline
shell 脚本
name: "shell example"
steps:
- run: echo Hello world
zx 脚本
name: "zx example"
steps:
- script: 'const listFile = await $`ls -la`; console.log(listFile)',
使用自定义应用(NPM Package)进行扩展
name: "zx example"
steps:
- run: @serverless-cd/dingding
快速体验
提前准备
Serverless-cd 部署完全是基于云进行,依赖相关云产品也是 Serverless 化。
函数计算 FC[4] :整个系统的计算能力运行在 FC 上
日志服务 SLS[5] :分布式日志存储服务,更好的定位和发现问题
对象存储 OSS[6] :用于存储日志信息
表格存储 Tablestore[7] : 应用和任务的云数据信息存储
本地部署
下载安装 Serverless Devs:npm install @serverlesss-devs -g (版本必须大于2.1.7),详细操作引导请参考 Serverless Devs 安装文档[8]
配置密匙信息:s config add, 详细操作引导请参考配置阿里云秘钥[9]
初始化项目:s init serverless-cd
进入项目并部署:cd serverless-cd && s deploy
Serverless-cd RoadMap
开源共建
https://github.com/Serverless-Devs/serverless-cd
PS: Serverless 给前端带来了一片崭新的天地,笔者是一名前端开发者同学,在此呼吁更多前端同学可以一起共建 Serverless 生态。
相关链接(可滑动查看):
[//www.tibco.com/zh-hans/reference-center/what-is-event-driven-architecture ] 事件驱动:https:
[//cloudevents.io/ ] cloudevents:https:
[//github.com/google/zx ] google/zx:https:
[//fcnext.console.aliyun.com/overview ] 函数计算 FC:https:
[//sls.console.aliyun.com/ ] 日志服务 SLS:https:
[//oss.console.aliyun.com/ ] 对象存储 OSS:https:
[//otsnext.console.aliyun.com/ ] 表格存储 Tablestore:https:
[//docs.serverless-devs.com/serverless-devs/install ] Serverless Devs 安装文档:https:
[//docs.serverless-devs.com/serverless-devs/command/config#config-add-%E5%91%BD%E4%BB%A4 ] 配置阿里云秘钥:https:
[//github.com/Serverless-Devs/serverless-cd ] Serverless-cd:https:
[//github.com/Serverless-Devs/serverless-cd ] 开源地址:https:
戳下方,详细了解 Serverless-cd!