1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Serverless Devs 重大更新,基于 Serverless 架構(gòu)的 CI/CD 框架:Serverless-cd

        共 5522字,需瀏覽 12分鐘

         ·

        2022-11-21 14:00

        作者 | 丹坤(Serverless Devs 開發(fā)者工具 maintainer)
        近日,Serverless 開發(fā)者平臺(tái) Serverless Devs 重磅發(fā)布基于 Serverless 架構(gòu)的輕量級 CI/CD 框架 Serverless-cd。Serverless-cd 是一款運(yùn)行在 Serverless 架構(gòu)上的功能強(qiáng)大而靈活,安全,低成本的 CI/CD 開源框架。
        框架基于 Serverless Devs 開發(fā)者工具打造,通過 Serverless-cd 開發(fā)者可以快速構(gòu)建企業(yè)內(nèi)部應(yīng)用管理 PaaS 平臺(tái)。

        開發(fā)者更想關(guān)注業(yè)務(wù)價(jià)值的創(chuàng)造


        Serverless Devs 是 CNCF 沙箱孵化項(xiàng)目,2020 年由阿里云開源,它是一個(gè)開源開放的 Serverless 開發(fā)者平臺(tái),Serverless Devs 也是業(yè)內(nèi)首個(gè)支持主流 Serverless 服務(wù) / 框架的云原生全生命周期管理的平臺(tái),致力于為開發(fā)者打造 Serverless 應(yīng)用開發(fā)一站式服務(wù),幫助解決當(dāng)下工具鏈之困,讓開發(fā)者一鍵體驗(yàn)多云產(chǎn)品,極速部署 Serverless 項(xiàng)目。
        Serverless Devs 項(xiàng)目為應(yīng)用的開發(fā),調(diào)試,部署,運(yùn)維,監(jiān)控提供全生命周期的解決方案。在實(shí)際使用中,應(yīng)用部署和交付對于開發(fā)者來說仍然是一個(gè)難題。開發(fā)者希望更專注于應(yīng)用的開發(fā)和價(jià)值的創(chuàng)造——也就是關(guān)注代碼編寫和應(yīng)用的構(gòu)建,而非應(yīng)用部署和交付。
        在 Serverless-cd 項(xiàng)目發(fā)布之前,Serverless Devs 項(xiàng)目通過集成的方式,集成了主流的 CI/CD 工具,如 Jenkins、Github、Gitlab 等:

        https://github.com/Serverless-Devs/cicd

        但使用這些傳統(tǒng)的 CI/CD 工具一般會(huì)面臨如下幾個(gè)問題:

        1.資源利用率低:需要提前準(zhǔn)備構(gòu)建機(jī)器,在沒有構(gòu)建任務(wù)時(shí),機(jī)器資源浪費(fèi);
        2.任務(wù)排隊(duì):如果資源準(zhǔn)備不充足,在業(yè)務(wù)構(gòu)建的高峰期間, 任務(wù)排隊(duì)時(shí)間過長;
        3.隔離性差:如果某個(gè)任務(wù)執(zhí)行過程中消耗大量計(jì)算/存儲(chǔ)資源,導(dǎo)致其他任務(wù)失?。?/span>
        4.安全問題:
          1. 使用平臺(tái)提供的 CI/CD 服務(wù):代碼和構(gòu)建機(jī)器不在同一個(gè)網(wǎng)絡(luò)環(huán)境,不得不開放公網(wǎng)訪問,引起安全問題。
          2. 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):

        1. 事件驅(qū)動(dòng)

        無論是接收 Webhook 自動(dòng)觸發(fā),還是調(diào)用 Open Api 手動(dòng)觸發(fā),對于 CICD 系統(tǒng)來說都是被動(dòng)接收指令進(jìn)行消費(fèi)。

        1. 業(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)勢:

        1. 自動(dòng)彈性

        Serverless 平臺(tái)會(huì)為每個(gè)構(gòu)建任務(wù)分配一個(gè)全新的實(shí)例,保證每個(gè)任務(wù)之間互不影響。再也不用擔(dān)心資源不足導(dǎo)致任務(wù)失敗,也避免了由于資源不足導(dǎo)致任務(wù)一直排不上隊(duì)的情況。

        1. 按價(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)用。

        1. 免運(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)


        Serverless-cd[10] 是完全遵循 Serverless 架構(gòu)最佳實(shí)踐,在規(guī)范和生態(tài)層面參考 Github Action 的實(shí)現(xiàn)。下面是 Serverless-cd 部署 Serverless Devs 應(yīng)用的一段 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 采用的是經(jīng)典的 Master Worker 模型,采用事件驅(qū)動(dòng)[1] 的架構(gòu),整體的架構(gòu)如下圖:

        觸發(fā)方式

        觸發(fā)器承擔(dān)事件驅(qū)動(dòng)中的生產(chǎn)者的角色,Serveless-cd 暫時(shí)提供了三種觸發(fā)方式:
        1. 通過 Webhook 自動(dòng)觸發(fā)
        開發(fā)者可以配置對應(yīng)的觸發(fā)條件:比如 Push 到 Master 分支,發(fā)起 Merge Request。這是一種非常敏捷的開發(fā)和交付的方式。
        1. 通過 Open api 觸發(fā)
        Serverless-cd 平臺(tái)的所有的能力都提供開放了 Open api。以便開發(fā)者更好的構(gòu)建企業(yè)內(nèi)部的 PaaS 平臺(tái)。
        1. 通過 CLI 觸發(fā)
        從技術(shù)的角度來看 Serverless Devs 本質(zhì)是一個(gè) CLI 工作,提供了組件化的能力,所謂的組件化也就是通過熱更新的機(jī)制,讓開發(fā)者根據(jù)自己的需求進(jìn)行拓展。Serverless-cd 通過自定義組件,讓開發(fā)者可以通過通過命令行直接操作。
        當(dāng)然我們也在計(jì)劃接入更多的觸發(fā)類型,比如 cloudevents[2]  觸發(fā), 定時(shí)觸發(fā)等。

        Serverless(FaaS) 平臺(tái)

        FaaS 平臺(tái)是整個(gè)平臺(tái)的核心部分,承擔(dān)事件驅(qū)動(dòng)中的消費(fèi)者角色,采用的是經(jīng)典的 Master Worker 模型。
        • Master Worker 模型在 Serverless 架構(gòu)的優(yōu)勢

        傳統(tǒng)的 Master Woker 部署,為了保證 Master 節(jié)點(diǎn)的高可用,需要部署三個(gè)節(jié)點(diǎn)搭配負(fù)載均衡以及健康檢查,來保證 Master 節(jié)點(diǎn)高可用。在 Serverless 架構(gòu)中,實(shí)例會(huì)根據(jù)請求自動(dòng)彈性擴(kuò)容,Master 節(jié)點(diǎn)天然具備高可用能力,無論在可靠性,還是靈活性都有較大的優(yōu)勢。
        • Master 函數(shù)作用

        Master 函數(shù)本質(zhì)是一個(gè) HTTP 類型函數(shù),作為整體流量的入口,同時(shí)也是整個(gè)系統(tǒng)的大腦,承擔(dān)著非常重要職責(zé)。

        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ò)上保證了絕對的安全。
           
        1. 過濾請求
        我們每天在 Git Repository 會(huì)觸發(fā)各種事件,比如新建 ISSUE,PUSH 代碼,發(fā)起 Merge Request 等。這些動(dòng)作都會(huì)通過 Webhook 觸發(fā),開發(fā)者可以配置規(guī)則過濾相關(guān)事件。
        下面是一個(gè)示例:代表在 GitHub 平臺(tái)提交到 Master 的代碼才會(huì)觸發(fā)。
        triggers:  github:    events:      - eventName: "push"        filter: 'body.ref in ["refs/heads/master"]'

        1. 路由轉(zhuǎn)發(fā)

        Master 函數(shù)負(fù)責(zé)將請求分發(fā)給 Worker 函數(shù),Worker 函數(shù)所有的行為都由 Master 函數(shù)控制。
        • Worker 函數(shù)作用

        Worker 函數(shù)本質(zhì)是一個(gè)事件(Event)函數(shù),只和 Master 函數(shù)通信,唯一的職責(zé)是處理 Pipeline,可以長時(shí)間運(yùn)行。

        自定義 Pipeline

        Serverless-cd 支持三種方式自定義 Pipeline:
        • shell 腳本

        shell 腳本是最容易理解也是使用最廣泛的:
        name: "shell example"steps:  - run: echo Hello world

        • zx 腳本

        google/zx[3] 允許開發(fā)者通過 javascript 語法來編寫您的 Shell 腳本:
        name: "zx example"steps:  - script: 'const listFile = await $`ls -la`; console.log(listFile)',

        • 使用自定義應(yīng)用(NPM Package)進(jìn)行擴(kuò)展

        Serverless-cd 也支持封裝通用的 NPM 包進(jìn)行擴(kuò)展:比如釘釘通知,企業(yè)微信通知,OSS 文件上傳等通用能力,都可以通過自定義應(yīng)用擴(kuò)展。自定義應(yīng)用本質(zhì)是發(fā)布在 NPM 倉庫的包。
        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ǔ)

           

        本地部署

        1. 下載安裝 Serverless Devs:npm install @serverlesss-devs -g (版本必須大于2.1.7),詳細(xì)操作引導(dǎo)請參考 Serverless Devs 安裝文檔[8] 

        2. 配置密匙信息:s config add, 詳細(xì)操作引導(dǎo)請參考配置阿里云秘鑰[9] 

        3. 初始化項(xiàng)目:s init serverless-cd

        4. 進(jìn)入項(xiàng)目并部署:cd serverless-cd && s deploy



         Serverless-cd RoadMap 

        開源共建


        Serverless -cd 是業(yè)界首個(gè)基于 Serverless 架構(gòu)的 CI/CD 的探索,歡迎大家關(guān)注我們的開源地址[11]  

        https://github.com/Serverless-Devs/serverless-cd 

        Serverless-cd 剛剛開源,還有大量的細(xì)節(jié)和工作,期待與更多開發(fā)者一起共建 Serevrless 生態(tài),讓開發(fā)者可以心無旁騖的專注業(yè)務(wù)開發(fā)和價(jià)值創(chuàng)造。

        PS: Serverless 給前端帶來了一片嶄新的天地,筆者是一名前端開發(fā)者同學(xué),在此呼吁更多前端同學(xué)可以一起共建 Serverless 生態(tài)。

        ??釘釘掃碼加入)

        相關(guān)鏈接(可滑動(dòng)查看):

        [1] 事件驅(qū)動(dòng):https://www.tibco.com/zh-hans/reference-center/what-is-event-driven-architecture[2] cloudevents:https://cloudevents.io/[3] google/zx:https://github.com/google/zx[4] 函數(shù)計(jì)算 FC:https://fcnext.console.aliyun.com/overview[5] 日志服務(wù) SLS:https://sls.console.aliyun.com/[6] 對象存儲(chǔ) OSS:https://oss.console.aliyun.com/[7] 表格存儲(chǔ) Tablestore:https://otsnext.console.aliyun.com/[8] Serverless Devs 安裝文檔:https://docs.serverless-devs.com/serverless-devs/install[9] 配置阿里云秘鑰:https://docs.serverless-devs.com/serverless-devs/command/config#config-add-%E5%91%BD%E4%BB%A4[10] Serverless-cd:https://github.com/Serverless-Devs/serverless-cd[11] 開源地址:https://github.com/Serverless-Devs/serverless-cd 

        戳下方,詳細(xì)了解 Serverless-cd!

        瀏覽 45
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产精品成人在线 | 五月天婷婷爱 | 噜噜色网 | 国产高潮久久 | 航空裸体服务特级毛片 | 国产日本一级二级三级 | 一进一出下面喷白浆九瑶视频 | 91一区二区国产精华液的特点 | 91老熟女让小伙子泄火 | 欧美日产成人无码蜜臀 |