GitHub Action + ACK:云原生 DevOps 落地利器
作者 | 瑤靖
來源 | 阿里巴巴云原生公眾號
據(jù)信通院《中國 DevOps 現(xiàn)狀調(diào)查報告(2020年)》顯示,63% 的企業(yè)已經(jīng)實踐落地 DevOps,采用持續(xù)交付流水線打通開發(fā)、測試、部署和運維多個環(huán)節(jié)。但是依然有 20% 的企業(yè)反饋實踐 DevOps 復(fù)雜,自建 Jenkins 需要自部署及插件運維,而 SaaS 化 CI/CD 工具又配置繁瑣,希望有更輕量便捷的工具加速其轉(zhuǎn)型落地。
目前,阿里云與 GitHub 聯(lián)合發(fā)布了快速部署至阿里云 ACK 的 GitHub Action Workflow。無需再自建部署維護 CI/CD 工具,基于開箱即用的 GitHub Action 及阿里云部署模板,即可實現(xiàn) GitHub 代碼變更后,自動應(yīng)用打包構(gòu)建上傳阿里云容器鏡像服務(wù) ACR、快速部署至阿里云容器服務(wù) ACK 的流程。本文將從 GitHub Action、阿里云容器服務(wù)及實踐 Demo 來為您詳細介紹。
圖 1 - GitHub Action 支持阿里云部署模板
GitHub 與阿里云聯(lián)合發(fā)布 GitHub Action Workflow
1. 關(guān)于 GitHub Acticon
圖 2 - GitHub Action 首頁
GitHub Action?是 GitHub 2018 年 10 月推出的內(nèi)置持續(xù)集成工具,簡化自動化構(gòu)建、測試、部署的流程。GitHub Action 通過將持續(xù)集成的原子操作封裝成 Actions,再基于 Workflow 流程定義,將多個 Action 組裝成可復(fù)用的模板,實現(xiàn) GitHub 事件更新后自動觸發(fā)執(zhí)行 Action 流程。
GitHub Action 有以下特點:
-
開箱即用:GitHub Action 是 SaaS 化托管服務(wù),可通過申明指定在 GitHub VM 或者容器內(nèi)部執(zhí)行任務(wù),保障業(yè)務(wù)高峰時期的彈性擴容。同時,也支持添加您自主托管在云上或者 IDC 的機器來執(zhí)行任務(wù),定制任務(wù)執(zhí)行的環(huán)境。
-
靈活便捷:支持 Linux、macOS、Windows 多平臺,虛擬機及容器運行環(huán)境。支持 Node.js、Python、Java、Ruby、PHP、Go、Rust、.NET 等多語言和框架。支持矩陣構(gòu)建,實現(xiàn)多平臺多環(huán)境并行兼容測試,提高軟件測試集成效率。
-
限額免費:GitHub Action 針對公開倉庫及自主托管的 runner 是免費的,針對其他 GitHub 規(guī)格有免費的存儲及任務(wù)運行時長,超額后按量收費,具體收費信息參考:http://t.tb.cn/69r7pJmDOlTsLN724CgrlO。
-
開放生態(tài):GitHub Action 使用 YAML 腳本編寫,它們可以像代碼片段一樣被編輯和復(fù)用。GitHub Action?Marketplace 也提供了云廠商認證及三方提供的 GitHub Action 模板,您可直接使用或二次定制。
GitHub Action 的核心概念分為以下四個部分:
-
Workflow:基于代碼倉庫的一次持續(xù)集成運行過程,可以設(shè)置定時或者由 GitHub 事件觸發(fā)。Workflow 文件采用 YAML 格式定義,存放在代碼倉庫的 .github/workflows 目錄下。一個代碼倉庫可以有多個 Workflow 文件,GitHub 識別到目錄下的 .yaml 文件,就會并行執(zhí)行這些 Workflow。
-
Job:一個 Workflow 由多個 Job 構(gòu)成。默認 Job 會并發(fā)執(zhí)行,也可以設(shè)置 Job 順序執(zhí)行,實現(xiàn)有前后邏輯依賴的 Workflow。
-
Step:一個Job 由多個 Step 構(gòu)成。同一個 Job 下的 Step 會在一個 Runner 上執(zhí)行,保證環(huán)境及數(shù)據(jù)的共享。
-
Action:一個 Step 由多個 Action 構(gòu)成。Action 是獨立的命令集,也基于 YAML 代碼定義的,開發(fā)者可以像代碼一樣編輯、重用以及共享。
以下是一個簡單的 GitHub Action Workflow 示例,定義了由兩個 Step 組成的 Job。其中,第一個 Step 復(fù)用了社區(qū)的 actions/checkout@v2 模板,執(zhí)行當前代碼庫的檢出,第二個 Step 則直接執(zhí)行了 Bash 命令。
name: Greeting on: pushjobs:my-job:name: My Jobruns-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v2- name: Greetingrun: |echo 'Welcome to Alibaba Cloud!'GitHub 與阿里云聯(lián)合發(fā)布的 GitHub Action Worflow,定義了多個 Step,支持快速構(gòu)建及部署至阿里云容器服務(wù) ACK。具體 Workflow 的定義,可參考鏈接:http://t.tb.cn/60eKsjLUTOKijV4NjGizeq。
2. 關(guān)于阿里云容器服務(wù)
如果說 GitHub Action 是實踐 DevOps 的瑞士軍刀,那么阿里云容器服務(wù)就是落地云原生 DevOps 的最佳界面,功能豐富又便捷易用。阿里云容器服務(wù) ACK(Alibaba Cloud Container Service for Kubernetes)是全球首批通過 Kubernetes 一致性認證的服務(wù)平臺,提供高性能的容器應(yīng)用管理服務(wù),支持企業(yè)級 Kubernetes 容器化應(yīng)用的生命周期管理。ACK 在阿里集團內(nèi)作為核心的容器化基礎(chǔ)設(shè)施,有豐富的應(yīng)用場景和經(jīng)驗積累,包括電商、實時音視頻、數(shù)據(jù)庫、消息中間件、人工智能等場景,支撐廣泛的內(nèi)外部客戶的 雙11 活動。同時,容器服務(wù)將阿里內(nèi)部各種大規(guī)模場景的經(jīng)驗和能力融入產(chǎn)品,向公有云客戶開放,提升了更加豐富的功能和更加突出的穩(wěn)定性,容器服務(wù)連續(xù)多年保持國內(nèi)容器市場份額第一。
圖 3 - 阿里云容器服務(wù)產(chǎn)品家族
在應(yīng)用管理領(lǐng)域,針對阿里的大規(guī)模實踐和企業(yè)的豐富生產(chǎn)實踐,阿里云進一步增強了可靠性、安全性,并且提供可賠付的 SLA 的 Kubernetes 集群 - ACK Pro 版。ACK Pro 版集群是在原 ACK 托管版集群的基礎(chǔ)上發(fā)展而來的集群類型,繼承了原托管版集群的所有優(yōu)勢,例如 Master 節(jié)點托管、Master 節(jié)點高可用等。同時,相比原托管版進一步提升了集群的可靠性、安全性和調(diào)度性能,并且支持賠付標準的 SLA,適合生產(chǎn)環(huán)境下有著大規(guī)模業(yè)務(wù),對穩(wěn)定性和安全性有高要求的企業(yè)客戶。
在應(yīng)用制品管理領(lǐng)域,面向安全及性能需求高的企業(yè)客戶,阿里云推出容器鏡像服務(wù)企業(yè)版 ACR EE,提供公共云首個獨享實例的企業(yè)級服務(wù)。ACR EE 除了支持多架構(gòu)容器鏡像,還支持多版本 Helm Chart、Operator 等符合 OCI 規(guī)范制品的托管。在安全治理部分,ACR EE 提供了網(wǎng)絡(luò)訪問控制、安全掃描、鏡像加簽、安全審計等多維度安全保障,助力企業(yè)從 DevOps 到 DevSecOps 的升級。在全球分發(fā)加速場景,ACR EE 優(yōu)化了網(wǎng)絡(luò)鏈路及調(diào)度策略,保障穩(wěn)定的跨海同步成功率。在大鏡像規(guī)模化分發(fā)場景,ACR EE 支持按需加載,實現(xiàn)鏡像數(shù)據(jù)免全量下載和在線解壓,平均容器啟動時間降低 60%。目前已有眾多企業(yè)生產(chǎn)環(huán)境模使用 ACR EE,保障企業(yè)客戶云原生應(yīng)用制品的安全托管及多場景高效分發(fā)。
如果你在容器鏡像的使用方面有什么問題,歡迎點擊填寫調(diào)查問卷,我們將隨機挑選 10 位參與者,贈送阿里云容器鏡像服務(wù)(企業(yè)版)ACR?EE 優(yōu)惠券。
基于 GitHub Action + ACK 構(gòu)建云原生 DevOps 實踐
下面將基于 GitHub Action 演示,如何將一個簡單 Nginx 應(yīng)用打包成容器鏡像,托管至阿里云容器鏡像服務(wù) ACR,再自動化部署至阿里云容器服務(wù) ACK,快速便捷地實現(xiàn) CI/CD 流程。GitHub Action Demo 地址參考:http://yli16.cn/LAZxC,您可以更新對應(yīng) Yaml 文件,實現(xiàn)自定義業(yè)務(wù)場景。
圖 4 - 基于 GitHub Action 的 DevOps 流程
1. 前期準備
-
開通阿里云容器鏡像服務(wù) ACR,創(chuàng)建命名空間及鏡像倉庫,參考文檔。如果您有強安全及高性能分發(fā)需求,建議使用 ACR EE 企業(yè)版實例,參考文檔。
-
開通阿里云容器服務(wù) ACK,在 ACK 上創(chuàng)建一個集群,參考文檔。如果您有強安全及高性能需求,建議使用 ACK PRO,參考文檔。
-
開通 GitHub 并創(chuàng)建倉庫,代碼倉庫中有業(yè)務(wù)代碼也包含應(yīng)用部署的模板 Yaml,可參考代碼示例。
2. 實踐過程
1)創(chuàng)建?Workflow
在 GitHub 代碼倉庫中,點擊 Actions 的 Tab 頁面,會有基于當前 GitHub 項目內(nèi)容推薦的 Workflow,選擇部署至阿里云 ACK 的 Workflow 模板。
圖 5 - GitHub 倉庫內(nèi)置 Actions
圖 6 - 選擇部署至阿里云 ACK 的 Workflow
GitHub Action 默認會在代碼倉庫 .github/workflows目錄下創(chuàng)建 alibabacloud.yml 文件。在 YAML 文件中定義監(jiān)聽代碼發(fā)布 Release 事件,一旦事件發(fā)生就會自動觸發(fā)后續(xù)集成部署的流程。您也可以搜索右側(cè)市場中相關(guān)的 Action,自定義 Job 中的 Action 步驟。
2)更新 Workflow?中變量信息
在 Workflow 中定義了 env 環(huán)境變量,需要按照實際情況更新對應(yīng)的地域、容器鏡像服務(wù)、容器服務(wù)集群等信息。ACCESS_KEY_ID 和 ACCESS_KEY_SECRET 定義了阿里云賬號 AK 信息,需要以密文形式設(shè)置在倉庫對應(yīng)的 Secrets 中。
圖 7 - 更新 Worflow 中對應(yīng)的環(huán)境變量
圖 8 - 更新 Secrets 信息
3)自動部署
配置完成后,默認當有一個 Release 發(fā)布后,會自動觸發(fā) GitHub Action 執(zhí)行任務(wù)。點擊 Actions 按鈕,可以看到對應(yīng)的任務(wù)執(zhí)行歷史和詳情。整個工作流是順序執(zhí)行的,一旦其中某個任務(wù)執(zhí)行失敗后,整個工作流都將終止執(zhí)行。可實現(xiàn)容器鏡像推送至 ACR 后,發(fā)現(xiàn)有高危安全漏洞,立即取消后續(xù)容器部署至 ACK 流程。當構(gòu)建、安全掃描及部署流程順利完成,則在 ACK 上會基于新的容器鏡像生成一個 nginx 服務(wù)。將安全風險識別及決策內(nèi)置全鏈路中,實踐安全高效的 DevSecOps 流程。
圖 9 - Workflow 執(zhí)行歷史
4)擴展
您可以在 GitHub Action Marketplace 上尋找需要的 Action 任務(wù)模板,來實現(xiàn)自定義的 Workflow 流程。目前,GitHub Action 上已經(jīng)有豐富的 Action 模板,覆蓋了多種語言的代碼依賴、代碼集成、代碼質(zhì)量等多種場景。可以基于模板快速構(gòu)建出一個支持多操作系統(tǒng)及多語言框架下的 Workflow 矩陣,并行測試項目的多個版本。
圖 10 - GitHub Action Marketplace
指引云原生時代落地 DevOps?的新路徑
相較于傳統(tǒng)的 Jenkins 工具,GitHub Action 是 SaaS 化托管服務(wù),無需部署及插件運維。只需簡單定義或復(fù)用官方 Workflow,即可實現(xiàn)便捷的 CI/CD 場景。相較于 Travis CI /Circle CI,GitHub Action 是 GitHub 推出的原生工具,集成體驗及靈活性更佳,并且有更豐富的 Action Marketplace 生態(tài)支持,讓用戶可以更便捷復(fù)用及自定義 Workflow。
如今 GitHub Action 也內(nèi)置支持了自動構(gòu)建推送阿里云容器鏡像服務(wù) ACR,自動部署阿里云容器服務(wù) ACK 的 Workflow,指引云原生時代落地 DevOps 的新路徑。希望可以幫助更多企業(yè)在享受云原生技術(shù)紅利同時,加速完成企業(yè)級的數(shù)字化轉(zhuǎn)型和架構(gòu)升級。
點擊參與問卷調(diào)查,即有可能獲得阿里云容器鏡像服務(wù)(企業(yè)版)ACR EE 優(yōu)惠券!
總結(jié)
以上是生活随笔為你收集整理的GitHub Action + ACK:云原生 DevOps 落地利器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenKruise v0.8.0 版本
- 下一篇: OpenKruise v0.8.0 核心