Serverless Devs 重大更新,基于 Serverless 架構(gòu)的 CI/CD 框架:Serverless-cd
開發(fā)者更想關(guān)注業(yè)務(wù)價(jià)值的創(chuàng)造

https://github.com/Serverless-Devs/cicd
但使用這些傳統(tǒng)的 CI/CD 工具一般會(huì)面臨如下幾個(gè)問題:
使用平臺(tái)提供的 CI/CD 服務(wù):代碼和構(gòu)建機(jī)器不在同一個(gè)網(wǎng)絡(luò)環(huán)境,不得不開放公網(wǎng)訪問,引起安全問題。 ECS 虛機(jī)部署:多個(gè)應(yīng)用同時(shí)在一個(gè)實(shí)例構(gòu)建,某個(gè)惡意應(yīng)用可以訪問其他的應(yīng)用的代碼
CI/CD 流水線的 2 個(gè)特點(diǎn)
CI/CD 流水線有兩個(gè)顯著的特點(diǎn):
事件驅(qū)動(dòng)
無論是接收 Webhook 自動(dòng)觸發(fā),還是調(diào)用 Open Api 手動(dòng)觸發(fā),對于 CICD 系統(tǒng)來說都是被動(dòng)接收指令進(jìn)行消費(fèi)。
業(yè)務(wù)明顯波峰波谷
觸發(fā) CI/CD 構(gòu)建的高峰一般在上班的時(shí)間段中,下班后以及晚上構(gòu)建任務(wù)比較少。同時(shí)有些任務(wù)執(zhí)行非常耗時(shí),有些任務(wù)又需要大量的 CPU&內(nèi)存資源,很難提前進(jìn)行有效的容量預(yù)估。
機(jī)器資源準(zhǔn)備過少:由于資源不足導(dǎo)致任務(wù)執(zhí)行失敗,或者多個(gè)任務(wù)進(jìn)行資源搶占,一直無法執(zhí)行。
機(jī)器資源準(zhǔn)備過多:無法充分利用,造成資源閑置浪費(fèi)。
基于 Serverless 架構(gòu)的 CI/CD 優(yōu)勢
在 Serverless 架構(gòu)下,CI/CD 可以具備以下優(yōu)勢:
自動(dòng)彈性
Serverless 平臺(tái)會(huì)為每個(gè)構(gòu)建任務(wù)分配一個(gè)全新的實(shí)例,保證每個(gè)任務(wù)之間互不影響。再也不用擔(dān)心資源不足導(dǎo)致任務(wù)失敗,也避免了由于資源不足導(dǎo)致任務(wù)一直排不上隊(duì)的情況。
按價(jià)值付費(fèi)
在業(yè)務(wù)波谷(晚上或者下班后)期,只有少量甚至沒有任務(wù)執(zhí)行,資源就出現(xiàn)了閑置和浪費(fèi)。Serverless 的理念是幫助客戶按實(shí)際產(chǎn)生的價(jià)值付費(fèi),只有實(shí)實(shí)在在的發(fā)生了構(gòu)建行為,才會(huì)產(chǎn)生費(fèi)用。
免運(yùn)維
Serverless 彈性是按照請求進(jìn)行水平擴(kuò)容的,開發(fā)者無需關(guān)注底層資源調(diào)度和運(yùn)維的工作,可以心無旁騖的實(shí)現(xiàn)業(yè)務(wù)開發(fā)和價(jià)值創(chuàng)造。
Serverless-cd 技術(shù)架構(gòu)
name: "Deploy Express application to FC"steps:- run: npm i @serverless-devs/s -g --registry=https://registry.npmmirror.com- run: s -v- run: echo ${{secrets.ALIYUN_ACCOUNTID}}- run: echo ${{secrets.ALIYUN_AK}}- run: echo ${{secrets.ALIYUN_SK}}- run: s config add --AccountID ${{secrets.ALIYUN_ACCOUNTID}} --AccessKeyID ${{secrets.SIMPLE_ALIYUN_AK}} --AccessKeySecret ${{secrets.SIMPLE_ALIYUN_SK}} -a default -f- run: s deploy --use-local -y

觸發(fā)方式
通過 Webhook 自動(dòng)觸發(fā)
通過 Open api 觸發(fā)
通過 CLI 觸發(fā)
Serverless(FaaS) 平臺(tái)
Master Worker 模型在 Serverless 架構(gòu)的優(yōu)勢
Master 函數(shù)作用
1.安全保障
公網(wǎng)密鑰校驗(yàn)
Master 暴露的 URL 地址是可以公網(wǎng)訪問的,為了防范惡意請求,serverless-cd 系統(tǒng)在下發(fā) URL 的同時(shí)也會(huì)下發(fā)簽名規(guī)則。如果是惡意的請求,就無法通過校驗(yàn),來保證系統(tǒng)的安全性。VPC 綁定 也支持綁定 VPC 環(huán)境,代碼倉庫和 Serverless-cd 服務(wù)綁定在同一個(gè) VPC 環(huán)境,通過 Webhook 觸發(fā)。公網(wǎng)用戶無法直接訪問,從網(wǎng)絡(luò)上保證了絕對的安全。
過濾請求
triggers:github:events:- eventName: "push"filter: 'body.ref in ["refs/heads/master"]'
路由轉(zhuǎn)發(fā)
Worker 函數(shù)作用
自定義 Pipeline
shell 腳本
name: "shell example"steps:- run: echo Hello world
zx 腳本
name: "zx example"steps:- script: 'const listFile = await $`ls -la`; console.log(listFile)',
使用自定義應(yīng)用(NPM Package)進(jìn)行擴(kuò)展
name: "zx example"steps:- run: @serverless-cd/dingding快速體驗(yàn)
提前準(zhǔn)備
Serverless-cd 部署完全是基于云進(jìn)行,依賴相關(guān)云產(chǎn)品也是 Serverless 化。
函數(shù)計(jì)算 FC[4] :整個(gè)系統(tǒng)的計(jì)算能力運(yùn)行在 FC 上
日志服務(wù) SLS[5] :分布式日志存儲(chǔ)服務(wù),更好的定位和發(fā)現(xiàn)問題
對象存儲(chǔ) OSS[6] :用于存儲(chǔ)日志信息
表格存儲(chǔ) Tablestore[7] : 應(yīng)用和任務(wù)的云數(shù)據(jù)信息存儲(chǔ)
本地部署
下載安裝 Serverless Devs:npm install @serverlesss-devs -g (版本必須大于2.1.7),詳細(xì)操作引導(dǎo)請參考 Serverless Devs 安裝文檔[8]
配置密匙信息:s config add, 詳細(xì)操作引導(dǎo)請參考配置阿里云秘鑰[9]
初始化項(xiàng)目:s init serverless-cd
進(jìn)入項(xiàng)目并部署:cd serverless-cd && s deploy

Serverless-cd RoadMap


開源共建
https://github.com/Serverless-Devs/serverless-cd

PS: Serverless 給前端帶來了一片嶄新的天地,筆者是一名前端開發(fā)者同學(xué),在此呼吁更多前端同學(xué)可以一起共建 Serverless 生態(tài)。
相關(guān)鏈接(可滑動(dòng)查看):
[] 事件驅(qū)動(dòng):https://www.tibco.com/zh-hans/reference-center/what-is-event-driven-architecture[] cloudevents:https://cloudevents.io/[] google/zx:https://github.com/google/zx[] 函數(shù)計(jì)算 FC:https://fcnext.console.aliyun.com/overview[] 日志服務(wù) SLS:https://sls.console.aliyun.com/[] 對象存儲(chǔ) OSS:https://oss.console.aliyun.com/[] 表格存儲(chǔ) Tablestore:https://otsnext.console.aliyun.com/[] Serverless Devs 安裝文檔:https://docs.serverless-devs.com/serverless-devs/install[] 配置阿里云秘鑰:https://docs.serverless-devs.com/serverless-devs/command/config#config-add-%E5%91%BD%E4%BB%A4[] Serverless-cd:https://github.com/Serverless-Devs/serverless-cd[] 開源地址:https://github.com/Serverless-Devs/serverless-cd
戳下方,詳細(xì)了解 Serverless-cd!
