Serverless Devs 重大更新,基於 Serverless 架構的 CI/CD 框架:Serverless-cd

簡介: 近日,Serverless 開發者平臺 Serverless Devs 重磅發佈基於 Serverless 架構的輕量級 CI/CD 框架——Serverless-cd。

近日,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 工具一般會面臨如下幾個問題:

 

  1. 資源利用率低:需要提前準備構建機器,在沒有構建任務時,機器資源浪費;
  2. 任務排隊:如果資源準備不充足,在業務構建的高峯期間, 任務排隊時間過長;
  3. 隔離性差:如果某個任務執行過程中消耗大量計算/存儲資源,導致其他任務失敗;
  4. 安全問題:
  1. 使用平臺提供的CICD服務:代碼和構建機器不在同一個網絡環境,不得不開放公網訪問,引起安全問題。
  2. ECS虛機部署:多個應用同時在一個實例構建,某個惡意應用可以訪問其他的應用的代碼

 

CI/CD 流水線的 2個特點

 

CI/CD 流水線有兩個顯著的特點:

 

  1. 事件驅動

 

無論是接收 Webhook 自動觸發,還是調用 Open Api 手動觸發,對於 CICD 系統來說都是被動接收指令進行消費

 

  1. 業務明顯波峯波谷

 

觸發 CI/CD 構建的高峯一般在上班的時間段中,下班後以及晚上構建任務比較少。同時有些任務執行非常耗時,有些任務又需要大量的CPU&內存資源,很難提前進行有效的容量預估。

 

  • 機器資源準備過少:由於資源不足導致任務執行失敗,或者多個任務進行資源搶佔,一直無法執行。
  • 機器資源準備過多:無法充分利用,造成資源閒置浪費。

 

基於Serverless架構的CI/CD優勢

 

在 Serverless 架構下,CI/CD 可以具備以下優勢

 

  1. 自動彈性

 

Serverless 平臺會爲每個構建任務分配一個全新的實例,保證每個任務之間互不影響。再也不用擔心資源不足導致任務失敗,也避免了由於資源不足導致任務一直排不上隊的情況。

 

  1. 價值付費

 

在業務波谷(晚上或者下班後)期,只有少量甚至沒有任務執行,資源就出現了閒置和浪費。Serverless 的理念是幫助客戶按實際產生的價值付費,只有實實在在的發生了構建行爲,纔會產生費用。

 

  1. 免運維

 

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暫時提供了三種觸發方式:

  1. 通過Webhook自動觸發:

 

開發者可以配置對應的觸發條件:比如Push到Master分支,發起Merge Request。這是一種非常敏捷的開發和交付的方式

 

  1. 通過Open api觸發:

 

Serverless cd平臺的所有的能力都提供開放了Open api。以便開發者更好的構建企業內部的PaaS平臺

 

  1. 通過CLI觸發:

 

從技術的角度來看Serverless-Devs本質是一個CLI工作,提供了組件化的能力,所謂的組件化也就是通過熱更新的機制,讓開發者根據自己的需求進行拓展。Serverless-cd通過自定義組件,讓開發者可以通過通過命令行直接操作。

 

當然我們也在計劃接入更多的觸發類型,比如 cloudevents 觸發, 定時觸發等。

 

Serverless(FaaS) 平臺

 

FaaS平臺是整個平臺的核心部分,承擔事件驅動中的消費者角色,採用的是經典的 Master Worker 模型。

 

Master Worker 模型在 Serverless 架構的優勢

 

傳統的Master Woker部署,爲了保證Master節點的高可用,需要部署三個節點搭配負載均衡以及健康檢查,來保證Master節點高可用。在Serverless架構中,實例會根據請求自動彈性擴容,Master節點天然具備高可用能力,無論在可靠性,還是靈活性都有較大的優勢

 

Master 函數作用

 

Master 函數本質是一個 HTTP 類型函數,作爲整體流量的入口,同時也是整個系統的大腦,承擔着非常重要職責。

 

  1. 安全保障
  • 公網密鑰校驗
    Master 暴露的 URL 地址是可以公網訪問的,爲了防範惡意請求,serverless-cd 系統在下發 URL 的同時也會下發簽名規則。如果是惡意的請求,就無法通過校驗,來保證系統的安全性
  • VPC 綁定

也支持綁定VPC環境,代碼倉庫和serverless-cd 服務綁定在同一個VPC環境,通過Webhook觸發。公網用戶無法直接訪問,從網絡上保證了絕對的安全

 

  1. 過濾請求

我們每天在 Git Repository 會觸發各種事件,比如新建 ISSUE,PUSH 代碼,發起 Merge Request 等。這些動作都會通過 Webhook 觸發,開發者可以配置規則過濾相關事件。下面是一個示例:代表在 GitHub 平臺提交到Master 的代碼纔會觸發

triggers:
  github:
    events:
      - eventName: "push"
        filter: 'body.ref in ["refs/heads/master"]'
  1. 路由轉發

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化。

 

 

本地部署

 

  1. 下載安裝 Serverless Devs:npm install @serverlesss-devs -g (版本必須大於2.1.7),詳細操作引導請參考Serverless Devs 安裝文檔
  2. 配置密匙信息:s config add, 詳細操作引導請參考配置阿里雲祕鑰
  3. 初始化項目:s init serverless-cd
  4. 進入項目並部署: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://click.aliyun.com/m/1000364859/

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章