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