如何通过Github Action使用Serverless Devs做CI/CD

简介: 当我们在体验Serverless之后,欲将项目真真实实的部署到Serverless架构时,CI/CD是我们很多人绕不开的话题,那么基于Serverless Devs这款工具,如何快速的和Github Action进行有机结合,实现CI/CD的能力呢?

当我们在体验Serverless之后,欲将项目真真实实的部署到Serverless架构时,CI/CD是我们很多人绕不开的话题,那么基于Serverless Devs这款工具,如何快速的和Github Action进行有机结合,实现CI/CD的能力呢?

CI/CD的“脚手架”

现在有很多的脚手架,但是Serverless CI/CD的脚手架应该还是少数的,而Serverless Devs为我们提供了一个CI/CD的脚手架,以Github Action为例,我们可以执行代码,快速在项目下初始化CI/CD模板。

例如,当前我的项目结构:

image

此时,我只需要告诉Serverless Devs,我要生成一个Github Action模板即可:

s cli cicd github

image

我们可以看到,系统会在当前项目创建相对应的CI/CD模板:

image

至此,我们完成了第一个步骤,初始化一个CI/CD的模板。

流程配置

Yml文件配置

系统所为我们生成的模板文件实际上是一个非常简单的案例:

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 deploy

整个核心流程是:

  1. 下载serverless-devs
  2. 配置密钥信息
  3. 项目部署(执行s deploy命令)

但是在实际生产过程中,我们可能需要自定义使用一些功能,此时可以参考Github Action的文档:https://docs.github.com/cn/actions

例如,我在下载serverless-devs之后,配置密钥之后,我需要进行build等操作,操作之后,我在删除临时生成的文件夹"./abc",此时我们可以:

...
      - 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 build
      - run: rm -rf ./abc
      - run: s deploy

所以,具体的流程,我们完全可以根据需求自定义。

账号信息配置

在上一个流程中,我们涉及到密钥信息的配置,我们可以使用Serverless Devs为我们提供的s config add命令进行。

例如,阿里云的账号体系需要AccountID,AccessKeyID,AccessKeySecret等内容,此时我们可以:

  1. 将密钥信息配置到Github Secrets中

image

我们创建多对密钥信息:

image

例如,我此处配置了三对密钥:

  • ALIYUN_ACCOUNT_ID对应阿里云密钥体系中的AccountID
  • ALIYUN_ACCESS_KEY_ID对应阿里云密钥体系中的AccessKeyID
  • ALIYUN_ACCESS_KEY_SECRET对应阿里云密钥体系中的AccessKeySecret

image

我此时则可以对应配置:

s config add --AccountID ${{secrets.ALIYUN_ACCOUNT_ID}} --AccessKeyID ${{secrets.ALIYUN_ACCESS_KEY_ID}} --AccessKeySecret ${{secrets.ALIYUN_ACCESS_KEY_SECRET}} -a website_access

当然,不同厂商可能需要不同的密钥信息配置,部分情况下厂商可能还需要配置临时密钥,此时可以通过s config add -h获取密钥配置的帮助文档:

jiangyu@ServerlessSecurity ~ % s config add -h
Usage: s config add [commands] [name]

You can add an account

    Example:
        $ s config add
        $ s config add --AccessKeyID ****** --AccessKeySecret ****** --AccountID ******
        $ s config add --AccessKey ****** --SecretKey ******
  
    Configuration parameters for cloud vendors:
        alibaba: AccountID, AccessKeyID, AccessKeySecret
        aws: AccessKeyID, SecretAccessKey
        baidu: AccessKeyID, SecretAccessKey
        huawei: AccessKey, SecretKey
        google: PrivateKeyData
        tencent: AccountID, SecretID, SecretKey

🧭 How to get the key: https://github.com/Serverless-Devs/docs/tree/master/zh/others/provider-config

Options:
  --AccountID [AccountID]              AccountID of key information
  --AccessKeyID [AccessKeyID]          AccessKeyID of key information
  --AccessKeySecret [AccessKeySecret]  AccessKeySecret of key information
  --SecretAccessKey [SecretAccessKey]  SecretAccessKey of key information
  --AccessKey [AccessKey]              AccessKey of key information
  --SecretKey [SecretKey]              SecretKey of key information
  --SecretID [SecretID]                SecretID of key information
  --PrivateKeyData [PrivateKeyData]    PrivateKeyData of key information
  -kl , --keyList [keyList]            Keys of key information, like: -kl key1,key2,key3
  -il , --infoList [infoList]          Values of key information, like: -kl info1,info2,info3
  -a , --aliasName [name]              Key pair alias, if the alias is not set, use default instead
  -h, --help                           Display help for command

如何配置自定义Key-Value的密钥,例如某个组件是我自己开发的,我需要配置一个Key为tempToken1,Value为tempValue1,和Key为tempToken2,Value为tempValue2,别名为demo的密钥对?
此时可以通过参数-kl , --keyList [keyList]-il , --infoList [infoList]自定义添加,例如:s config add -kl tempToken1,tempToken2 -il tempValue1,tempValue2 -a demo
image

密钥中的别名有什么?
密钥中的别名,是为了帮助Serverless Devs更快的识别出你要用的密钥信息,主要是在Yaml中体现,例如:
image
在此处配置的密钥信息(默认是default),如果此处配置了密钥别名是"default",那么系统就会在执行相关操作的时候,去获取名为"default"的密钥信息;

我的一个应用中,涉及到部署到多个平台,需要多个密钥信息,如何配置?
例如,当存在项目:
image
此时,该app中涉及到两个Service,分别用了不同的组件以及不同的密钥内容website_access, fc_access
我们可以通过配置多个密钥信息来进行CI/CD的配置

  1. 在Github Secrets处配置对应的Key-Value
  2. 在生成的.github/workflow/serverless-devs.yml文件中配置密钥信息:
s config add -kl tempToken1,tempToken2 -il tempValue1,tempValue2 -a website_access
s config add -kl tempToken3,tempToken4 -il tempValue3,tempValue4 -a fc_access
相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
10月前
|
存储 运维 安全
Github Action:让静态网站实现定时发布
本文探讨了静态网站实现定时发布的解决方案,针对静态博客缺乏原生定时发布功能的问题,作者基于Zola工具构建的静态网站,最终选择通过GitHub Action实现定时发布。文章对比了几种实现方式,包括人力、自建服务及平台原生功能等,指出最理想的是利用平台能力但多数平台缺乏该功能。文中详细介绍了GitHub Action方案的原理、部署过程和使用流程,并分享了高级配置如推送通知。同时分析了方案的局限性,如时间颗粒度粗、设置繁琐等,并提出改进建议。总结中展望了未来优化方向,旨在提升静态网站维护体验。
189 0
|
对象存储
一个通过 GitHub Action 将 GitHub 仓库与阿里云 OSS 完全同步的脚本
一种将 GitHub 仓库完全同步到阿里云 OSS 的方法。
|
Linux C++ Docker
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
154 0
|
数据安全/隐私保护
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
210 0
|
3月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
508 30
|
4月前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
532 12
|
9月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
971 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
7月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
369 0
|
9月前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
773 30
|
4月前
|
人工智能 运维 安全
聚焦 AI 应用基础设施,云栖大会 Serverless AI 全回顾
2025 年 9 月 26 日,为期三天的云栖大会在杭州云栖小镇圆满闭幕。随着大模型技术的飞速发展,我们正从云原生时代迈向一个全新的 AI 原生应用时代。为了解决企业在 AI 应用落地中面临的高成本、高复杂度和高风险等核心挑战,阿里云基于函数计算 FC 发布一系列重磅服务。本文将对云栖大会期间 Serverless+AI 基础设施相关内容进行全面总结。

相关产品

  • 函数计算