作者:阿里云云原生

本篇内容连载自《Serverless 架构下的 AI 利用开发:入门、实战与性能优化》。

Serverless 架构与 CI/CD 工具的联合

CI/CD 是一种通过在利用开发阶段引入自动化流程以频繁向客户交付利用的办法。 如图所示,CI/CD 的外围概念是继续集成继续交付继续部署

作为一个面向开发和经营团队的解决方案,CI/CD 次要针对集成新代码时所引发的问题。具体而言,CI/CD 能够让继续自动化和继续监控贯通于利用的整个生命周期(从集成、测试阶段到交付和部署阶段)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以麻利形式协同反对。

CI/CD 的概念与内容简图

在 Serverless 架构下,通常会有很多函数形成一个残缺的性能或服务,这种比拟细粒度的性能往往会给前期我的项目保护带来极大的不便,包含但不限于函数治理、我的项目的构建、公布层面等的不便。此时在 Serverless 架构中,CI/CD 就显得尤为重要。更加迷信、平安的继续集成和部署过程不仅会让整体的业务流程更加标准,也会在肯定水平上升高人为操作、手工集成部署所产生谬误的概率,同时也会大规模加重运维人员的工作累赘。

如果想要通过 CI/CD 平台,迷信且不便地进行 Serverless 利用的继续集成、交付和部署,通常状况下咱们须要借助相应的开发者工具,例如 Serverless Framework、Serverless Devs 等。Serverless开发者工具配置到 CI/CD 平台的流程能够简化为下图。

Serverless开发者工具配置到 CI/CD 平台的流程

与 GitHub Action 的集成

在 GitHub Action 的 Yaml 文件中,减少 Serverless Devs 相干下载、配置以及命令执行相干内容。例如,在 GitHub 仓库中创立文件.github/workflows/publish.yml,文件内容如下:

name: Serverless Devs Project CI/CDon:    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          - run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID             ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default          - run: s deploy

与 GitHub Action 集成次要包含以下几局部内容:

  • 通过 NPM 装置最新版本的 Serverless Devs 开发者工具:
run: npm install -g @serverless-devs/s
  • 通过 config 命令进行密钥等信息的配置:
run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.    AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
  • 执行某些命令,例如通过 deploy 命令进行我的项目的部署,或者通过 build 等命令进行我的项目的构建:
run: s deploy

对于密钥的配置:密钥信息是通过${{secrets.*}}获取的,此时,须要将所须要的密钥和对应的 Key 配置到 GitHub Secrets 中,例如在下面的案例中,须要 AccountID、AccessKeyID、AccessKeySecret 三个密钥的 Key 就能够配置相干内容。找到 GitHub Secrets 页面,如图所示。

GitHub Secrets 页面

创立和配置密钥信息,如图所示。

创立和配置密钥信息页面

此处配置了 3 对密钥,如图所示。

GitHub 仓库配置密钥后果页面

与 Gitee Go 的集成

在开启 Gitee Go 的服务之后,在流水线的 Yaml 文件中,能够减少 Serverless Devs 的相干下载、配置以及命令执行相干内容。

例如,在 GitHub 仓库中创立文件.github/workflows/publish.yml,文件内容如下:

name: serverless-devsdisplayName: 'Serverless Devs Project CI/CD'triggers:                                     #流水线触发器配置   push:       - matchType: PRECISE           branch: mastercommitMessage: ''stages:    - stage:            name: deploy-stage            displayName: 'Deploy Stage'            failFast: false            steps:                            #构建步骤配置               - step: npmbuild@1             #采纳NPM编译环境                 name: deploy-step                 displayName: 'Deploy Step'                 inputs:                      #构建输出参数设定                     nodeVersion: 14.15       #指定 node 环境版本为 14.15                     goals: |                 #装置依赖,配置相干主题、部署参数并公布部署                     node -v                     npm -v                     npm install -g @serverless-devs/s                     s co nfig add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret $ACCESSKEYSECRET -a default                     s deploy

与 GitHub Action 集成的流程相似,与 Gitee Go 集成次要包含以下几局部内容。

  • 通过 NPM 装置最新版本的 Serverless Devs 开发者工具:
npm install -g @serverless-devs/s
  • 通过 config 命令进行密钥等信息的配置:
s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret     $ACCESSKEYSECRET -a default
  • 执行某些命令,例如通过 deploy 命令进行我的项目的部署,或者通过 build 等命令进行我的项目的构建:
s deploy

对于密钥的配置:密钥信息是通过$*获取的,此时将所需的密钥和对应的 Key 配置到 Gitee 的环境变量治理中,例如在下面的案例中,须要 AccountID、AccessKeyID、AccessKeySecret 三个密钥的 Key 就能够配置相干内容。

找到 Gitee 的环境变量治理页面,如图所示。

Gitee 的环境变量治理页面

创立和配置密钥信息,如图所示。

创立和配置密钥信息页面

此处配置了 3 对密钥,如图所示。

Gitee 仓库实现密钥配置页面

与 Jenkins 的集成

在将 Serverless Devs 集成到 Jenkins 之前,须要先基于 Jenkins 官网装置并运行 Jenkins。本地启动 Jenkins,通过浏览器进入并配置实现根底设置,之后新增凭据设置,如下图所示。

浏览器链接:

http://localhost:8080

Jenkins 凭据设置页面

能够依据须要,减少密钥信息。以阿里云为例,新增 3 个全局凭据:

  • jenkins-alicloud-account-id : 阿里云 accountId
  • jenkins-alicloud-access-key-id : 阿里云 accessKeyId
  • jenkins-alicloud-access-key-secret : 阿里云 accessKeySecret 

此时,能够对本身的 Serverless Devs 我的项目进行欠缺。创立文件 Jenkinsfile:

pipeline {     agent {         docker {             image 'maven:3.3-jdk-8'         }      }     environment {          ALICLOUD_ACCESS = 'default'          ALICLOUD_ACCOUNT_ID = credentials('jenkins-alicloud-account-id')          ALICLOUD_ACCESS_KEY_ID = credentials('jenkins-alicloud-access-key-id')          ALICLOUD_ACCESS_KEY_SECRET = credentials('jenkins-alicloud-access-key-secret')      }      stages {          stage('Setup') {              steps {                  sh 'scripts/setup.sh'              }         }     }}

与 Jenkins 集成次要内容包含以下两局部:

  • environment 局部:次要是依据下面步骤配置的密钥信息,进行密钥的解决。
  • stages 局部:包含 sh 'scripts/setup.sh'局部,即运行 scripts/setup.sh 文件,进行相干内容的筹备和配置。

筹备 scripts/setup.sh 文件,只须要在我的项目下创立该文件即可。

#!/usr/bin/env bashecho $(pwd)curl -o- -L http://cli.so/install.sh | bashsource ~/.bashrcecho $ALICLOUD_ACCOUNT_IDs config add --AccountID $ALICLOUD_ACCOUNT_ID --AccessKeyID $ALICLOUD_ACCESS_KEY_     ID --AccessKeySecret $ALICLOUD_ACCESS_KEY_SECRET -a $ALICLOUD_ACCESS(cd code && mvn package && echo $(pwd))s deploy -y --use-local --access $ALICLOUD_ACCESS

在该文件中,次要包含以下几个局部:

  • 装置最新版本的 Serverless Devs 开发者工具:
curl -o- -L http://cli.so/install.sh | bash
  • 通过 config 命令进行密钥等信息的配置:
s config add --AccountID $ALICLOUD_ACCOUNT_ID --AccessKeyID $ALICLOUD_ACCESS_    KEY_ID --AccessKeySecret $ALICLOUD_ACCESS_KEY_SECRET -a $ALICLOUD_ACCESS
  • 执行某些命令,例如通过 deploy 命令进行我的项目的部署,或者通过 build 等命令进行我的项目构建:
s deploy -y --use-local --access $ALICLOUD_ACCESS

实现密钥配置之后,能够创立一个 Jenkins 流水线。该流水线的源是指标 GitHub地址。接下来,就能够开始运行 Jenkins 流水线,运行完结后可失去相干的后果。

与云效的集成

在云效中,能够间接抉择 Serverless Devs 开发者工具,并在自定义命令中输出以下内容:

# input your command herenpm install -g @serverless-devs/ss config add --AccountID ${ACCOUNTID} --AccessKeyID ${ACCESSKEYID} --AccessKeySecret     ${ACCESSKEYSECRET} -a defaults deploy

与 GitHub Action、Gitee Go 以及 Jenkins 的配置相似,与云效集成同样次要包含 3 局部。

  • 装置最新版本的 Serverless Devs 开发者工具:
npm install -g @serverless-devs/s
  • 通过 config 命令进行密钥等信息的配置:
s config add --AccountID ${ACCOUNTID} --AccessKeyID    ${ACCESSKEYID} --AccessKeySecret
  • 执行某些命令,例如通过 deploy 命令进行我的项目的部署,或者通过 build 等命令进行我的项目的构建:
s deploy -y

成果如图所示。

云效命令配置页面

因为在命令中援用了 3 个重要的环境变量:ACCOUNTID、 ACCESSKEYID、 ACCESSKEYSECRET,因而还须要在环境变量中减少图所示的相似内容。

环境变量配置页面

CI/CD 平台集成

总结通过下面几个案例不难发现,在做自动化公布时,最外围的 3 个流程如下。

  • 下载工具:命令为 npm install -g @Serverless-devs/s。
  • 配置密钥:命令为s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret $ACCESSKEYSECRET -a default。
  • 我的项目部署:命令为s deploy。 

尽管只是以 GitHub Action、Gitee Go、Jenkins、云效几个工具作为案例,实际上无论哪个工具与 CI/CD 平台集成,上述 3 个外围流程都不会产生实质变动。另外,下面所列举的流程更多是在做自动化公布,在公布之前有时还须要进行一些测试和从新构建,以便依据具体的理论须要进行适当的欠缺。

综上所述,如果想非常简单、疾速、迷信地实现 Serverless 利用的 CI/CD 建设,一个欠缺的开发者工具是必不可少的。

Serverless Devs 是一款多云开发者工具。咱们能够通过该工具非常简单、疾速、不便地部署 AWS、阿里云、腾讯云等多个云厂商的函数计算等相干服务。同时,Serverless Devs 也是一个开源我的项目,便于用户随时随地奉献组件、利用。

Serverless 利用的可观测性

Serverless 利用的可观测性被很多用户所关注。可观测性是通过内部体现判断零碎外部状态的形式。在利用开发中,可观测性有助于判断零碎外部的健康状况,在零碎呈现问题时,帮忙定位问题、排查问题、剖析问题;在零碎安稳运行时,帮忙评估危险,预测可能呈现的问题。

在 Serverless 利用开发中,如果函数的并发度继续升高,很可能是业务推广团队业务规模迅速扩张。为了防止达到并发度限度而触发流控,开发者就须要提前进步并发度。

以阿里云函数计算为例,阿里云函数计算在可观测性层面提供了多种维度,包含 Logging、Metrics 以及 Tracing 等。如图所示:

函数计算可观测性整体图表

在控制台监控核心,咱们能够查看整体的 Metrics、服务级 Metrics 以及每个函数的 Metrics,还能够看到以后函数计算的申请记录。

函数计算的申请记录

依据不同的申请记录,咱们还能够查看函数计算的详细信息。

函数计算的申请详情

除了在控制台的监控核心查看函数的日志等信息,咱们还能够在函数详情页面看到函数计算的具体日志信息,

函数计算的日志信息

还能够看到 Tracing 相干信息,如下图所示。

函数计算的 Tracing 相干信息


阿里云、蚂蚁团体的 4 位专家刘宇、田初东、卢萌凯、王仁达(排名不分先后)零碎梳理阿里在 Serverless 架构下的 AI 教训,联袂推出新书 《Serverless 架构下的 AI 利用开发:入门、实战与性能优化》

本书是对于 Serverless 架构下机器学习实战的技术书,咱们心愿通过简单明了的语言、实在的案例,以及凋谢的源代码,为读者介绍 Serverless 架构与机器学习相干的基础知识,帮忙读者在 Serverless 架构下开发、上线机器学习我的项目。