作者:阿里云云原生
本篇内容连载自《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/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
- 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-devs
displayName: 'Serverless Devs Project CI/CD'
triggers: #流水线触发器装备
push:
- matchType: PRECISE
branch: master
commitMessage: ''
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 bash
echo $(pwd)
curl -o- -L http://cli.so/install.sh | bash
source ~/.bashrc
echo $ALICLOUD_ACCOUNT_ID
s 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 here
npm install -g @serverless-devs/s
s config add --AccountID ${ACCOUNTID} --AccessKeyID ${ACCESSKEYID} --AccessKeySecret
${ACCESSKEYSECRET} -a default
s 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−−AccessKeyIDACCOUNTID –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 架构下开发、上线机器学习项目。