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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 当我们在体验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
相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1月前
|
人工智能 Cloud Native Serverless
Serverless Devs 官网全新升级,Serverless+AI 重磅来袭
Serverless Devs 官网迎来全新升级,主站以 AI 应用开发的叙事透出项目特性和解决方案。应用中心(Registry)将各类热门 AI 应用模版、实用 AI 工具以及 AI 工作流等呈现给用户。本次升级主题为“一站式 AI/函数/应用开发”,希望为开发者提供更加便利的应用模版搜索和展示服务,本文将对本次升级的三大看点进行整理,欢迎您来体验!
|
6月前
|
Serverless 对象存储
现代化 Web 应用构建问题之配置Serverless Devs的秘钥信息如何解决
现代化 Web 应用构建问题之配置Serverless Devs的秘钥信息如何解决
61 1
|
6月前
|
存储 前端开发 Serverless
Serverless 魔法之旅:如何用 Funcraft、OSS 和 ROS 打造超级CI/CD流水线!
【8月更文挑战第8天】在现代软件开发中,CI/CD对于提升效率与代码质量至关重要。本文介绍如何运用阿里云的Serverless服务——Funcraft、OSS及ROS构建完整的CI/CD流程。首先配置Funcraft实现代码自动化构建与部署;接着利用OSS管理静态文件,确保网站内容正确加载;最后借助ROS自动化资源创建与管理,实现代码自动部署。通过整合这些服务,不仅加速了开发进程,还保证了代码质量和部署一致性,充分发挥Serverless架构的优势。
93 5
|
6月前
|
Java Spring 传感器
AI 浪潮席卷,Spring 框架配置文件管理与环境感知,为软件稳定护航,你还在等什么?
【8月更文挑战第31天】在软件开发中,配置文件管理至关重要。Spring框架提供强大支持,便于应对不同环境需求,如电商项目的开发、测试与生产环境。它支持多种格式的配置文件(如properties和YAML),并能根据环境加载不同配置,如数据库连接信息。通过`@Profile`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
94 0
|
6月前
|
Devops 持续交付 开发者
.NET自动化之旅:是Azure DevOps还是GitHub Actions能够打造完美的CI/CD流水线?
【8月更文挑战第28天】在现代软件开发中,持续集成(CI)与持续部署(CD)是提升代码质量和加速交付的关键实践。对于 .NET 应用,Azure DevOps 和 GitHub Actions 等工具可高效构建 CI/CD 流水线,提升开发效率并确保软件稳定可靠。Azure DevOps 提供一站式全流程管理,支持 YAML 定义的自动化构建、测试和部署;GitHub Actions 则以简洁灵活著称,适用于 .NET 项目的自动化流程。选择合适的工具可显著提高开发效率并确保高质量标准。
46 0
|
6月前
|
缓存 JavaScript Serverless
阿里云云效产品使用合集之如何在Serverless Devs阶段指定Node.js版本
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
7月前
|
人工智能 运维 机器人
函数计算产品使用问题之怎么使用Serverless Devs创建GPU函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
缓存 安全 测试技术
用 GitHub Action 构建一套 CI/CD 系统
在讲 Action 实践之前还需先讲下 Nebula Graph 的需求:首要目标比较明确就是自动化测试,分为单元测试和集成测试,顺带再解决一下 PM 小姐姐的发布需求,构建起来了第一版的 CI/CD 流程。
1365 0
|
1月前
|
开发工具 git
如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈
如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈
186 69
如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈
|
4月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
133 3

相关产品

  • 函数计算