只更新代码,然后发布版本:基于 Serverless Devs 原子化操作阿里云函数计算

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 本文以阿里云为例,通过在 Github 上使用 Servelress Devs 单纯对代码进行更新,并进行版本发布,该流程是比较常见的,也是比较通用的,希望读者可以发挥想象力,将这个流程应用到自己的项目中。


作者 | Anycodes

众所周知,随着时间的发展,Serverless 命令行工具也逐渐的玩出了更多的花样,就目前来看,常见的形态有两种,一种是通过 Yaml 来进行资源的描述,另外一种是纯粹的命令行操作,而不依赖这些内容。

第一种通过 Yaml 来进行资源描述,其好处不言而喻,目前主流的 Serverless 开发者工具均是类似的模式,例如阿里云的 Funcraft,著名的开源项目 Serverless Framework 等,通过 Yaml,使用者可以通过简单的命令,进行复杂的操作,例如开发者在 Yaml 中描述好服务、函数等配置,描述好代码位置,只需要 deploy 就可以将本地项目部署到线上,非常方便。但是这里有一个非常明显的劣势,在很多时候我们的企业管理者,给每个人分配的权限是固定的,例如运维人员只能更新某些内容,开发人员只能更新某些代码,某些负责可以发布版本等,那么这个时候”一把梭”的行为就显得非常尴尬,想为开发者做更多,但是有些开发者不需要你做更多,那么”高阶能力”和”原子能力”的平衡就显得至关重要的。

第二种模式,虽然是不需要依赖 Yaml,在很多时候使用起来可能会稍微复杂一些,例如我们创建一个函数可能涉及到很多流程:创建服务,创建函数,创建触发器…,相对比上面所说的一条指令而言,确实复杂很多,但是这种无 Yaml 的模式,更适合做原子操作,可以最大程度解决上述问题,同时这种做法也可以在一定程度上进行更多的拓展,例如某些本不需要依赖 Yaml 的行为:查询服务列表,查询函数列表……

所以这两种模式各有优缺点,我们在使用的时候完全可以组合来使用,达到最大的一个生产效能。那么一个新问题来了,以阿里云函数计算为例,如何同时拥有这两种模式的使用方法呢?

其实 Serverless Devs 天然支持 Yaml 描述和非 Yaml 描述的能力,例如阿里云函数计算的 FC 组件就是一个可以依靠 Yaml 描述进行资源操作的组件,而 FC-API 组件则是 API 相关的原子性操作。

本文将会以这样一个案例/场景为例,为读者介绍这两者的使用方法:

1.通过 Serverless Devs 快速创建一个服务/函数/触发器

2.通过无 Yaml 的模式对其中的代码部分进行单独的更新

3.更新之后发布一个版本

4.通过 Git+Github Action 实现一个代码自动化发布和版本自动化发布的能力

快速创建函数

我们只需要通s init且选择阿里云函数计算的 Python3 Http 函数即可:

创建完成之后,我们只需要进入到对应的文件夹,并且执行s deploy即可将项目快速部署到线上。在进入到项目后,我们可以在项目下看到一个s.yaml的文件,这个文件就是资源描述文件:

其完整的描述:

https://github.com/devsapp/fc/blob/main/docs/Others/yaml.md

此时我们可以通过s deploy进行项目的部署:

部署完成,我们可以打开系统分配给我们的域名,我们可以看到内容:

通过无 Yaml 模式更新函数

我们可以编辑index.pyHello world!变为Hello world Serverless Devs!

然后我们就要接触一个新的组件 FC-API :

https://github.com/devsapp/fc-api

我们可以执行帮助文档:s cli fc-api -h

此时我们需要明确的是,当我们执行s cli时候,系统就不去读 Yaml,而直接进行相关方法的调用。

如果我们对这个方法还是不清楚,我们可以s cli fc-api updateFunction -h

此时我们只需要按照规范,填写好地区,服务名,函数名,以及要更新的字段即可:

s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-trigger-function--code '{"zipFile": "./"}'

完成之后,我们可以再去看一下之前的页面是否同步更新了:

此处可能有疑问,你的帮助文档写的是:--code string [JSON String] The code of the function. The code must be packaged into a ZIP file.
你是怎么知道传递--code '{"zipFile": "./"}'的?

因为在我们看帮助文档的时候,题已经提醒了我们这是一个 JSON String,同时在帮助文档最上面是有链接地址:

```
Usage

s cli fc-api updateFunction

 API Document: https://help.aliyun.com/document_detail/189986.html


Options


--region stringThe region of fc endpoint.                                                    

--access stringSpecify the key name.                                                        

--props stringThe json string of props.                                                    

--serviceName stringThe name of the service.                                                      

--functionName stringThe description of the function.                                              

--code string[JSON String]The code of the function.The code must be packaged into a ZIP file.

>此时,我们可以打开 https://help.aliyun.com/document_detail/189986.html


![image](https://user-images.githubusercontent.com/21079031/124550239-f5fb9900-de62-11eb-819b-9e662cb80fe6.png)


![image](https://user-images.githubusercontent.com/21079031/124550302-0ca1f000-de63-11eb-974e-9453449e525b.png)


>此时为了方便,Serverless devs 支持本地路径,会帮助你进行打包等操作。


当然,我们还可以更刺激一些,修改其他内容,如单纯修改一些 timeout:

s cli fc-api updateFunction —region cn-hangzhou —serviceName fc-deploy-service —functionName http-trigger-function —timeout 70

![image](https://user-images.githubusercontent.com/21079031/124550447-3bb86180-de63-11eb-836a-01d102a6eab9.png)


## 通过无 Yaml 模式发布版本


和上面一样,我们可以用`s cli fc-api -h `查看一下版本发布的方法:`s cli fc-api publishVersion -h`


![image](https://user-images.githubusercontent.com/21079031/124550575-715d4a80-de63-11eb-8182-bd154507e19d.png)


尝试拼接参数:

s cli fc-api publishVersion —region cn-hangzhou —serviceName fc-deploy-service —description “This is a test version”

得到结果:


![image](https://user-images.githubusercontent.com/21079031/124550685-9ce03500-de63-11eb-95bf-ed59c494fd7d.png)



## CI/CD 组件的使用


当我们想要把上面只更新代码,发布版本的能力集成到 CI/CD,或者某些自动化流程中,如何操作呢?


以 GithubAction 为例,我们可以直接执行`s cli cicd`:


![image](https://user-images.githubusercontent.com/21079031/124550942-07917080-de64-11eb-8b57-d59eba0cdc47.png)


接下来,我们对`./.github/workflow/serverless-devs.yml`进行自定义编辑:


```yaml

name: Serverless Devs Project CI/CD


on:

 push:

   branches: [ master ]


jobs:

 serverless-devs-cd:

   runs-on: ubuntu-latest

   steps:

     - uses: actions/checkout@v2

     - uses: actions/setup-node@v2

       with:

         node-version: 12

         registry-url: https://registry.npmjs.org/

     - run: npm install

     - run: npm install -g @serverless-devs/s

     # 默认密钥配置指令是阿里云密钥配置指令,更多可以参考:

     # 如何通过 Github Action使用Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage

     # Serverless Devs 的官网是通过 Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice

     - run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default

     - run: s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-trigger-function --code '{"zipFile":"./"}'

     - run: s cli fc-api publishVersion --region cn-hangzhou --serviceName fc-deploy-service


我们只是在最后加了两个人 run,一个是发布代码,一个是发布版本,此时我们可以创建一个 Github 仓库,尝试一下:

创建完成之后,我们可以按照案例提醒,进行密钥的配置:

# 默认密钥配置指令是阿里云密钥配置指令,更多可以参考:

# 如何通过 Github Action 使用 Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage

# Serverless Devs 的官网是通过 Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice

接下来, 我们通过 git init 等一系列指令,完成代码推到仓库:

此时,我们再次修改代码:

修改完成之后,我们将代码 push 到测试仓库,可以看到,我们在 Action 中可以看到一个 workflow 在执行:

稍等片刻,当这个流程完成:

我们打开之前的页面,可以看到,网页内容已经顺利被更新:

总结

本文以阿里云为例,通过在 Github 上使用 Servelress Devs 单纯对代码进行更新,并进行版本发布,该流程是比较常见的,也是比较通用的,希望读者可以发挥想象力,将这个流程应用到自己的项目中。

(文章转载自 Go Serverless)

Serverless Devs 参与的贡献

Serverless Devs 的开源为国内外开发者提供了 Serverless 工具的新选择,让开发者可以以更短的路径体验到多云 Serverless 产品,以更快的速度创建和部署 Serverless  应用,以更简单和更自动化的方法进行项目管理/运维,未来期待更多开发者参与共建。

目前代码已经在 Gitee(码云)和 GitHub 上正式开放:



相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
打赏
0
0
0
0
12712
分享
相关文章
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
70 12
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
Serverless MCP 运行时业界首发,函数计算支持阿里云百炼 MCP 服务!阿里云百炼发布业界首个全生命周期 MCP 服务,无需用户管理资源、开发部署、工程运维等工作,5 分钟即可快速搭建一个连接 MCP 服务的 Agent(智能体)。作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力。
128 0
 Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
Serverless Devs 官网全新升级,Serverless+AI 重磅来袭
Serverless Devs 官网全新升级,Serverless+AI 重磅来袭
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
257 12
美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
美的楼宇科技基于阿里云 EMR Serverless Spark 建设 IoT 数据平台,实现了数据与 AI 技术的有效融合,解决了美的楼宇科技设备数据量庞大且持续增长、数据半结构化、数据价值缺乏深度挖掘的痛点问题。并结合 EMR Serverless StarRocks 搭建了 Lakehouse 平台,最终实现不同场景下整体性能提升50%以上,同时综合成本下降30%。
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用

相关产品

  • 函数计算
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等