前言
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题。具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。
Serverless架构在很多时候,会有很多函数组成完整的服务,这也给函数在后期的维护带来了极大的不便,此时CI/CD就显得尤为重要。更加科学、安全的持续集成和部署过程,不仅仅会让我们整体的业务流程更加规范,也会在一定程度上,降低人为操作,手工集成部署所产生错误的概率,同时也会大规模降低运维人员的工作负担。所以在Serverless架构下,CI/CD的流程就显得非常重要。本文将会以Serverless Devs开发者工具为例,通过Github Action实现函数计算相关服务的CI/CD功能。
CI/CD实践
如果需要通过CI/CD,将Serverless项目持续集成和部署到对应的云厂商上,需要我们有一个合适的工具来做这个事情。此时我们可以根据云厂商,选择不同的开发者工具,当然我们也可以选择一些常见的开源Serverless开发者工具来做这个事情,例如Serverless Devs,Serverless Framework等。本文将会以Serverless Devs为例,将Github上的仓库,通过Github Action部署函数到阿里云函数计算平台。
首先我们需要了解Github Action,GitHub Actions 是 GitHub 2018年10月推出的持续集成服务,通过Github Action和Serverless Devs组合,不仅可以实现持续集成服务,在很多时候也可以实现部署操作。
通过Github Action为例,我们可以通过Yaml格式,进行相对应的流程部署:
- Checkout
- 初始化 Serverless Devs
- 配置阿里云密钥信息
- 进行一些CI操作(可选)
- 进行一些CD操作(部署到线上)
例如,我们的Yaml可以是:
name: serverless CI/CD
on:
push:
branches: [master]
jobs:
serverless-cicd-job:
name: Serverless cicd
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Initializing Serverless-Devs
uses: Serverless-Devs/serverless-devs-initialization-action@main
with:
provider: alibaba
AccessKeyID: ${{ secrets.ALIYUN_ACCESS_KEY_ID }}
AccessKeySecret: ${{ secrets.ALIYUN_ACCESS_KEY_SECRET }}
AccountID: ${{ secrets.ALIYUN_ACCOUNT_ID }}
- name: Config
run: sudo --preserve-env s config add -p alibaba --AccessKeyID ${{ secrets.ALIYUN_ACCESS_KEY_ID }} --AccessKeySecret ${{ secrets.ALIYUN_ACCESS_KEY_SECRET }} --AccountID ${{ secrets.ALIYUN_ACCOUNT_ID }}
- name: Deploying
run: sudo --preserve-env s deploy
这个流程中,主要是当有代码push到master分支后进行:
- Checkout操作
- 通过Serverless-Devs/serverless-devs-initialization-action@main初始化Serverless Devs
- 通过s config add指令进行密钥配置
- 通过s deploy进行项目部署(CD)
我们可以创建仓库:
然后配置密钥信息,可以将我们的密钥信息配置到Settings中的Secrets下:
主要需要配置我们Yaml中的几个变量:
secrets.ALIYUN_ACCESS_KEY_ID:阿里云密钥ACCESS_KEY_ID
secrets.ALIYUN_ACCESS_KEY_SECRET:阿里云密钥ACCESS_KEY_SECRET
secrets.ALIYUN_ACCOUNT_ID:阿里云用户ID
配置过程如下:
配置结果如下:
配置完成之后,我们可以在本地修改一下代码内容,修改之后,可以提交到线上:
部署到线上之后,我们可以看到Serverless CI/CD流程已经被触发:
稍等片刻,我们可以看到已经完成了整个流程,并且可以在日志中查看到部署结果:
可以看到我们的函数已经被更新到了线上。至此,我们完成了Serverless CI/CD的案例。
总结
如果想非常简单,快速,方便的完成Serverless应用的CI/CD的建设,一个完善的开发者工具是必不可少的,Serverless Devs是一款多云的开发者工具,可以通过该工具非常简单的、快速的、方便的部署AWS、阿里云、腾讯云等多个云厂商的函数计算等相关服务,同时Serverless Devs也是一个开源项目,用户可以随时随地的贡献组件,应用以满足更多场景的诉求。
通过Serverless Devs与Github Action的结合,我们可以用极低的成本,完成Serverless项目的CI/CD建设,不仅仅可以部署函数计算,还可以部署对象存储,API网关等多种云服务。希望读者通过对本章内容的阅读,可以对Serverless CI/CD有一个初步的认识,并且可以快速的在自己的项目中,应用起来,进入到“更安全、更科学的”应用集成、部署的实战中