近日,Serverless开发者平台ServerlessDevs发布了一个基于Serverless架构的轻量级CI/CD框架-Serverless-cd。Serverless-cd是一个运行在Serverless架构上的强大、灵活、安全、低成本的CI/CD开源框架。该框架建立在ServerlessDevs开发者工具的基础上,Serverless-cd开发者可以通过它快速搭建企业内部应用管理PaaS平台。开发人员希望更加关注商业价值的创造。ServerlessDevs是一个CNCF沙箱孵化项目。2020年由阿里云开源,是一个开源开放的Serverless开发者平台。ServerlessDevs也是业界第一个支持主流Serverless服务/框架的云原生全生命周期管理平台,致力于为开发者打造Serverless应用开发的一站式服务,帮助解决目前工具链困难,让开发者一键体验多云产品,快速部署Serverless项目。ServerlessDevs项目为应用开发、调试、部署、运维、监控提供了全生命周期的解决方案。在实际使用中,应用的部署和交付仍然是困扰开发者的难题。开发人员希望更多地关注应用程序开发和价值创造——即编码和构建应用程序,而不是应用程序部署和交付。在Serverless-cd项目发布之前,ServerlessDevs项目通过集成整合了主流的CI/CD工具:https://github.com/Serverless-Devs/cicd,比如Jenkins、Github、Gitlab等,但是使用这些传统的CI/CD工具普遍面临以下问题:资源利用率低:需要提前准备好构建机器,没有构建任务时会浪费机器资源;任务排队:如果资源准备不足,业务建设高峰期,任务排队时间过长;隔离性差:如果一个任务在执行过程中消耗了大量的计算/存储资源,其他任务就会失败;安全问题:使用平台提供的CICD服务:代码和构建机不在同一个网络环境下,所以一定不要公网访问不开放,造成安全问题。ECS虚拟机部署:一个实例同时构建多个应用,恶意应用可以访问其他应用的代码。CI/CDpipeline的两个特点CI/CDpipeline有两个显着的特点:事件驱动,无论是接收Webhook自动触发,还是调用OpenApi手动触发,对于CICD系统来说,都是被动接收指令的消费类业务,波峰波谷明显触发CI/CD建设高峰期一般在上班时间,下班后和晚上的建设任务较少。同时,有些任务执行起来非常耗时,有些任务需要大量的CPU和内存资源,因此很难提前进行有效的容量预估。机器资源准备太少:资源不足导致任务执行失败,或者已经有多个任务被资源抢占无法执行。准备过多的机器资源:无法充分利用,造成闲置资源的浪费。基于Serverless架构的CI/CD的优势在Serverless架构下,CI/CD可以有以下优势:自动弹性Serverless平台会为每个构建任务分配一个新的实例,保证每个任务之间不会相互影响。您再也不用担心资源不足导致任务失败,避免资源不足导致任务无法排队的情况。按价值付费在业务低谷期(晚上或下班后),任务很少或没有,资源闲置浪费。Serverless的思想是帮助客户为实际产生的价值买单。只有当施工行为真正发生时,才会产生成本。免运维Serverless弹性,按需横向扩展。开发者无需关注底层的资源调度和运维工作,可以心无旁骛地实现业务开发和价值创造。Serverless-cd技术架构Serverless-cd完全遵循Serverless架构的最佳实践,在规范和生态层面参考了GithubAction的实现。下面是一段用于Serverless-cd部署ServerlessDevs应用的YAML:registry.npmmirror.com-运行:s-v-运行:echo${{secrets.ALIYUN_ACCOUNTID}}-运行:echo${{secrets.ALIYUN_AK}}-运行:echo${{secrets.ALIYUN_SK}}-运行:s配置添加--AccountID${{secrets.ALIYUN_ACCOUNTID}}--AccessKeyID${{secrets.SIMPLE_ALIYUN_AK}}--AccessKeySecret${{secrets.SIMPLE_ALIYUN_SK}}-adefault-f-run:sdeploy--use-local-yServerless-cd采用经典的MasterWorker模型,采用事件驱动架构。整体架构如下图所示:触发器模式触发器承担事件驱动生产者的角色。Serveless-cd暂时提供了三种触发方式:通过Webhook自动触发:开发者可以配置相应的触发条件:比如Push到Master分支,发起MergeRequest。这是一种由OpenAPI触发的非常敏捷的开发和交付方式:ServerlessCD平台的所有能力都提供了OpenAPI。让开发者更好的构建企业内部PaaS平台,并通过CLI触发:从技术角度来说,Serverless-Devs本质上是一个CLI作业,提供组件化能力。所谓组件化就是通过热更新机制。让开发者根据自己的需求进行扩展。Serverless-cd允许开发者通过自定义组件直接通过命令行操作。当然,我们也计划接入更多的触发器类型,比如cloudevents触发器,定时触发器等。Serverless(FaaS)平台FaaS平台是整个平台的核心部分,承担着消费者在事件驱动中的角色,使用经典的MasterWorker模型。Serverless架构中MasterWorker模型的优势传统的MasterWorker部署,为了保证Master节点的高可用,需要部署三个带负载均衡和健康检查的节点来保证Master节点的高可用。在Serverless架构中,实例会根据请求自动弹性扩展。Master节点天然具备高可用性,在可靠性和灵活性方面具有很大的优势。Master函数的作用。系统的入口也是整个系统的大脑,承担着非常重要的职责。安全保障公网密钥验证Master暴露的URL地址可以从公网访问。为了防止恶意请求,serverless-cd系统在发布url的时候也会发布签名规则。如果是恶意请求,则无法通过验证,确保系统安全。VPC绑定还支持绑定到VPC环境。代码仓库和serverless-cd服务绑定在同一个VPC环境下,通过Webhook触发。公网用户无法直接访问,从网络过滤请求保证绝对安全。我们每天都会在GitRepository中触发各种事件,比如创建一个新的ISSUE,PUSH代码,发起一个MergeRequest。这些动作会通过Webhook触发,开发者可以配置规则来过滤相关事件。下面是一个例子:只有在GitHub平台提交给Master的代码才会触发触发器:github:events:-eventName:"push"filter:'body.refin["refs/heads/master"]'路由转发Master函数负责将请求分发给Worker函数。Worker函数的所有行为都由Master函数控制。Worker函数本质上是一个事件(Event)函数,只与Master函数通信。唯一的职责是处理可以运行很长时间的Pipeline。自定义pipelineserverless-cd支持三种方式自定义pipelineshellscriptshellscript是最容易理解和最广泛使用的名称:“shellexample”步骤:-运行:echoHelloworldzxscriptgoogle/zx允许开发者通过javascript编写语法你的shell脚本名称:“zxexample”步骤:-script:'constlistFile=await$`ls-la`;console.log(listFile)',使用自定义应用(NPMPackage)扩展Serverless-cd也支持封装常用的NPM包进行扩展:钉钉通知、企业微信通知、OSS文件上传等通用能力都可以通过自定义扩展应用程序。自定义应用程序的本质是在NPM存储库中发布的包。name:"zxexample"步骤:-run:@serverless-cd/dingding快速体验提前准备serverless-cd部署完全基于云,依赖相关云产品也是serverless。FunctionComputeFC:整个系统的计算能力运行在FC上LogServiceSLS:分布式日志存储服务,更好的定位和发现问题,下载安装ServerlessDevs:npminstall@serverless-devs-g(版本必须大于2.1.7),详细操作指导参考ServerlessDevs安装文档配置关键信息:sconfigadd,详细操作指导请参考配置阿里云秘钥初始化项目:sinitserverless-cd进入项目并部署:cdserverless-cd&&sdeployServerless-cdRoadMap开源共建Serverless-cd是业界首个CI/CD探索基于Serverless架构,欢迎大家关注我们开源地址:https://github.com/Serverless-Devs/serverless-cd。Serverless-cd刚刚开源,还有很多细节和工作要做。我们期待与更多的开发者一起构建Serevrless生态,让开发者可以心无旁骛地专注于业务发展和价值创造。
