近日,Serverless 開發者平臺 Serverless Devs 重磅發布基于 Serverless 架構的輕量級 CI/CD 框架——Serverless-cd,Serverless-cd 是一款運行在 Serverless 架構上的功能強大而靈活,安全,低成本的CI/CD開源框架,該框架基于 Serverless Devs 開發者工具打造,通過 Serverless-cd開發者可以快速構建企業內部應用管理PaaS平臺,
開發者更想關注業務價值的創造
Serverless Devs 是CNCF 沙箱范訓專案,2020年由阿里云開源,它是一個開源開放的 Serverless 開發者平臺,Serverless Devs 也是業內首個支持主流 Serverless 服務 / 框架的云原生全生命周期管理的平臺,致力于為開發者打造 Serverless 應用開發一站式服務,幫助解決目前的工具鏈之困,讓開發者一鍵體驗多云產品,極速部署 Serverless 專案,
Serverless Devs 專案為應用的開發,除錯,部署,運維,監控提供全生命周期的解決方案,在實際使用中,應用部署和交付對于開發者來說仍然是一個難題,開發者希望更專注于應用的開發和價值的創造——也就是關注代碼撰寫和應用的構建,而非應用部署和交付,
在 Serverless-cd 專案發布之前,Serverless Devs 專案通過集成的方式,集成了主流的 CI/CD 工具:https://github.com/Serverless-Devs/cicd,如 Jenkins、Github、Gitlab 等,但使用這些傳統的 CI/CD 工具一般會面臨如下幾個問題:
- 資源利用率低:需要提前準備構建機器,在沒有構建任務時,機器資源浪費;
- 任務排隊:如果資源準備不充足,在業務構建的高峰期間, 任務排隊時間過長;
- 隔離性差:如果某個任務執行程序中消耗大量計算/存盤資源,導致其他任務失敗;
- 安全問題:
- 使用平臺提供的CICD服務:代碼和構建機器不在同一個網路環境,不得不開放公網訪問,引起安全問題,
- ECS虛機部署:多個應用同時在一個實體構建,某個惡意應用可以訪問其他的應用的代碼
CI/CD 流水線的 2個特點
CI/CD 流水線有兩個顯著的特點:
- 事件驅動
無論是接收 Webhook 自動觸發,還是呼叫 Open Api 手動觸發,對于 CICD 系統來說都是被動接收指令進行消費
- 業務明顯波峰波谷
觸發 CI/CD 構建的高峰一般在上班的時間段中,下班后以及晚上構建任務比較少,同時有些任務執行非常耗時,有些任務又需要大量的CPU&記憶體資源,很難提前進行有效的容量預估,
- 機器資源準備過少:由于資源不足導致任務執行失敗,或者多個任務進行資源搶占,一直無法執行,
- 機器資源準備過多:無法充分利用,造成資源閑置浪費,
基于Serverless架構的CI/CD優勢
在 Serverless 架構下,CI/CD 可以具備以下優勢
- 自動彈性
Serverless 平臺會為每個構建任務分配一個全新的實體,保證每個任務之間互不影響,再也不用擔心資源不足導致任務失敗,也避免了由于資源不足導致任務一直排不上隊的情況,
- 按價值付費
在業務波谷(晚上或者下班后)期,只有少量甚至沒有任務執行,資源就出現了閑置和浪費,Serverless 的理念是幫助客戶按實際產生的價值付費,只有實實在在的發生了構建行為,才會產生費用,
- 免運維
Serverless 彈性是按照請求進行水平擴容的,開發者無需關注底層資源調度和運維的作業,可以心無旁騖的實作業務開發和價值創造,
Serverless-cd 技術架構
Serverless-cd 是完全遵循 Serverless 架構最佳實踐,在規范和生態層面參考 Github Action 的實作,下面是Serverless-cd 部署 Serverless Devs 應用的一段 YAML:
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
Serverless-cd 采用的是經典的 Master Worker 模型,采用事件驅動的架構,整體的架構如下圖:
觸發方式
觸發器承擔事件驅動中的生產者的角色,Serveless-cd暫時提供了三種觸發方式:
- 通過Webhook自動觸發:
開發者可以配置對應的觸發條件:比如Push到Master分支,發起Merge Request,這是一種非常敏捷的開發和交付的方式
- 通過Open api觸發:
Serverless cd平臺的所有的能力都提供開放了Open api,以便開發者更好的構建企業內部的PaaS平臺
- 通過CLI觸發:
從技術的角度來看Serverless-Devs本質是一個CLI作業,提供了組件化的能力,所謂的組件化也就是通過熱更新的機制,讓開發者根據自己的需求進行拓展,Serverless-cd通過自定義組件,讓開發者可以通過通過命令列直接操作,
當然我們也在計劃接入更多的觸發型別,比如 cloudevents 觸發, 定時觸發等
Serverless(FaaS) 平臺
FaaS平臺是整個平臺的核心部分,承擔事件驅動中的消費者角色,采用的是經典的 Master Worker 模型,
Master Worker 模型在 Serverless 架構的優勢
傳統的Master Woker部署,為了保證Master節點的高可用,需要部署三個節點搭配負載均衡以及健康檢查,來保證Master節點高可用,在Serverless架構中,實體會根據請求自動彈性擴容,Master節點天然具備高可用能力,無論在可靠性,還是靈活性都有較大的優勢
Master 函式作用
Master 函式本質是一個 HTTP 型別函式,作為整體流量的入口,同時也是整個系統的大腦,承擔著非常重要職責,
- 安全保障
- 公網密鑰校驗
Master 暴露的 URL 地址是可以公網訪問的,為了防范惡意請求,serverless-cd 系統在下發 URL 的同時也會下發簽名規則,如果是惡意的請求,就無法通過校驗,來保證系統的安全性 - VPC 系結
也支持系結VPC環境,代碼倉庫和serverless-cd 服務系結在同一個VPC環境,通過Webhook觸發,公網用戶無法直接訪問,從網路上保證了絕對的安全
- 過濾請求
我們每天在 Git Repository 會觸發各種事件,比如新建 ISSUE,PUSH 代碼,發起 Merge Request 等,這些動作都會通過 Webhook 觸發,開發者可以配置規則過濾相關事件,下面是一個示例:代表在 GitHub 平臺提交到Master 的代碼才會觸發
triggers:
github:
events:
- eventName: "push"
filter: 'body.ref in ["refs/heads/master"]'
- 路由轉發
Master 函式負責將請求分發給 Worker 函式,Worker 函式所有的行為都由 Master 函式控制
Worker函式作用
Worker 函式本質是一個事件(Event)函式,只和 Master 函式通信,唯一的職責是處理 Pipeline,可以長時間運行,
自定義 pipeline
serverless-cd 支持三種方式自定義 pipeline
shell 腳本
shell 腳本是最容易理解也是使用最廣泛的
name: "shell example"
steps:
- run: echo Hello world
zx 腳本
google/zx 允許開發者通過javascript語法來撰寫您的Shell腳本
name: "zx example"
steps:
- script: 'const listFile = await $`ls -la`; console.log(listFile)',
使用自定義應用(NPM Package)進行擴展
Serverless-cd也支持封裝通用的NPM包進行擴展:比如釘釘通知,企業微信通知,OSS檔案上傳等通用能力,都可以通過自定義應用擴展,自定義應用本質是發布在NPM倉庫的包,
name: "zx example"
steps:
- run: @serverless-cd/dingding
快速體驗
提前準備
serverless-cd 部署完全是基于云進行,依賴相關云產品也是Serverless化,
- 函式計算FC:整個系統的計算能力運行在FC上
- 日志服務SLS:分布式日志存盤服務,更好的定位和發現問題
- 物件存盤OSS:用于存盤日志資訊
- 表格存盤Tablestore: 應用和任務的云資料資訊存盤
本地部署
- 下載安裝 Serverless Devs:
npm install @serverlesss-devs -g(版本必須大于2.1.7),詳細操作引導請參考Serverless Devs 安裝檔案 - 配置密匙資訊:
s config add, 詳細操作引導請參考配置阿里云秘鑰 - 初始化專案:
s init serverless-cd - 進入專案并部署:
cd serverless-cd && s deploy
Serverless-cd RoadMap

開源共建
Serverless-cd 是業界首個基于 Serverless 架構的 CI/CD 的探索,歡迎大家關注我們的開源地址:https://github.com/Serverless-Devs/serverless-cd ,Serverless-cd 剛剛開源,還有大量的細節和作業,期待與更多開發者一起共建 Serevrless 生態,讓開發者可以心無旁騖的專注業務開發和價值創造,
PS: Serverless給前端帶來了一片嶄新的天地,筆者是一名前端開發者同學,在此呼吁更多前端同學可以一起共建Serverless生態
更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/537709.html
標籤:其他
上一篇:在博客園隨筆中插入3D分子模型
