Serverless 实战 —— Funcraft + OSS + ROS 进行 CI/CD


首先介绍下在本文出现的几个比较重要的概念:
函数计算(Function Compute)
函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息
参考。

Funcraft:Funcraft 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档
参考。

OSS: 对象存储。海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%的数据可靠性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。

ROS:资源编排(ROS)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。

CI/CD: CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。

本文打算以一个简单的函数计算项目为例,在此基础上编写测试用例,进行配置,让其支持 CI/CD 工作流程。实现如下四个小目标:
这里以大家熟悉的 Github 仓库为例,并结合 Travis CI 。当用户往示例项目 push 或者 PR(Pull Request)时,会自动触发 Travis CI 的工作任务,进行单元测试、构建打包和部署发布。示例项目地址为:
https://github.com/vangie/tz-time ,该项目是基于 FC Http trigger 实现的简单 web 函数,访问放函数是会返回指定时区的当前时间。项目目录结构如下部分文件作用介绍:测试通常非常如下三类:单元测试、集成测试和 E2E 测试。在函数计算场景下,这三类测试可以通过如下方法实现。本例子只实现了单元测试,集成测试和 E2E 测试对于 travis 示例来说触发方法类似,实现方法可以参见上面的方法提示进行配置。FC 函数的单元测试和普通的函数并无二致。采用熟悉的单元测试框架即可,本例中使用了 jest 进行测试。下面看看一个测试用例的代码片段通过 jest.mock 对 moment-timezone 进行 mock,让 tz 被调用的时候返回预先设定好的值,而不是一个动态变化的时间。通常该类单元测试分为三步:如果依赖包不存在原生依赖(依赖 linux 下的可执行文件或者 so 库文件)的使用 npm test 触发测试即可,如果有原生依赖,那测试需要跑在 fun 提供的 sbox 模拟环境里,使用如下命令触发本例子中的集成测试会借助 fun local start 命令把函数在本地启动起来,由于函数配置了 http trigger,所以可以通过 http 请求调用函数。集成测试我们还是才是 jest 框架进行编写,为了区别于单元测试文件
*.test.js ,集成测试文件使用
.integration-test.js 文件后缀。为了让 jest 命令独立的跑集成测试用例而不是和单元测试混和在一起,需要编撰如下文件 jest.config.integration.js 然后在 package.json 中配置 scripts 于是可以通过执行 npm run integration:test 来执行集成测试。然后在此基础上在 Makefile 中添加 integration-test 目标:integration-test 目标依赖 funlocal.PID 目标,后者负责启动一个 fun local 进程,该进程会在本地启动 8000 端口。解读一下上面的 Makefile 代码
npm run integration:test 会启动若干的测试用例,其中一个测试用例如下:端对端测试和集成测试的测试用例非常的类似,区别在于测试的服务端,端对端测试部署一套真实的环境,集成测试通过 fun local 本地模拟。本例中借助
fun deploy --use-ros 部署一套环境,环境名称为
tz-e2e- 前缀带上时间戳,这样每次测试都会部署一套新的环境,不同环境之间相互不会影响。测试完成再通过 aliyun-cli 工具把 ROS 的 stack 删除即可。下面端对端测试的 Makefile 目标:
fun package 命令可被用于构建交付物,
fun package 需要指定一个 OSS 的 bucket。fun package 命令会完成如下步骤:生成的 template.packaged.yml 文件就是最终交付物,可以通过 fun deploy 命名进行部署。当构建环节生成了交付物以后,就可以通过 fun deploy 进行部署了。持续开发云主机域名部署需要解决如下两个问题:
fun deploy 借助于 ROS,可以轻松的解决上述问题。其中:注意,此处如果不指定参数
--use-ros ,fun deploy 会采用直接调用云资源 API 进行部署, 这是 fun deploy 的默认部署方式,虽然也基本实现了幂等部署,但是仅支持部署有限的云资源(FC、OTS、API Gateway等),远不及 ROS 丰富,而且也没法做到 ROS 已支持的回滚和一键删除,所以此处不推荐。上面所有步骤的脚本化配置可以参考 Makefile 和 .travis.yml 文件。通过上述两个文件可以实现 Github 和 Travis CI 的联动,实现基于代码提交触发的 CI/CD。本文讲述了 FC 函数“
阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关推荐: jenkins服务器免密登录tomcat jenkins发布or回滚插件

安装maven91 gitlab-ctl start 92 /etc/init.d/jenkins start上传所需安装包查看自身jdk环境93 rpm -qa | grep jdk使用阿里云仓库地址vim /usr/local/maven/conf/set…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/14 15:06
Next 05/14 15:06

相关推荐