GitHub Action + ACK:雲原生 DevOps 落地利器

據信通院《中國 DevOps 現狀調查報告(2020年)》顯示,63% 的企業已經實踐落地 DevOps,採用持續交付流水線打通開發、測試、部署和運維多個環節。但是依然有 20% 的企業反饋實踐 DevOps 複雜,自建 Jenkins 需要自部署及插件運維,而 SaaS 化 CI/CD 工具又配置繁瑣,希望有更輕量便捷的工具加速其轉型落地。

目前,阿里雲與 GitHub 聯合發佈了快速部署至阿里雲 ACK 的 GitHub Action Workflow。無需再自建部署維護 CI/CD 工具,基於開箱即用的 GitHub Action 及阿里雲部署模板,即可實現 GitHub 代碼變更後,自動應用打包構建上傳阿里雲容器鏡像服務 ACR、快速部署至阿里雲容器服務 ACK 的流程。本文將從 GitHub Action、阿里雲容器服務及實踐 Demo 來爲您詳細介紹。

圖 1 - GitHub Action 支持阿里雲部署模板

GitHub 與阿里雲聯合發佈 GitHub Action Workflow

1. 關於 GitHub Acticon

圖 2 - GitHub Action 首頁

GitHub Action 是 GitHub 2018 年 10 月推出的內置持續集成工具,簡化自動化構建、測試、部署的流程。GitHub Action 通過將持續集成的原子操作封裝成 Actions,再基於 Workflow 流程定義,將多個 Action 組裝成可複用的模板,實現 GitHub 事件更新後自動觸發執行 Action 流程。

GitHub Action 有以下特點:

  • 開箱即用:GitHub Action 是 SaaS 化託管服務,可通過聲明指定在 GitHub VM 或者容器內部執行任務,保障業務高峯時期的彈性擴容。同時,也支持添加您自主託管在雲上或者 IDC 的機器來執行任務,定製任務執行的環境。
  • 靈活便捷:支持 Linux、macOS、Windows 多平臺,虛擬機及容器運行環境。支持 Node.js、Python、Java、Ruby、PHP、Go、Rust、.NET 等多語言和框架。支持矩陣構建,實現多平臺多環境並行兼容測試,提高軟件測試集成效率。
  • 限額免費:GitHub Action 針對公開倉庫及自主託管的 runner 是免費的,針對其他 GitHub 規格有免費的存儲及任務運行時長,超額後按量收費,具體收費信息參考:http://t.tb.cn/69r7pJmDOlTsLN724CgrlO
  • 開放生態:GitHub Action 使用 YAML 腳本編寫,它們可以像代碼片段一樣被編輯和複用。GitHub Action Marketplace 也提供了雲廠商認證及三方提供的 GitHub Action 模板,您可直接使用或二次定製。

GitHub Action 的核心概念分爲以下四個部分:

  • Workflow:基於代碼倉庫的一次持續集成運行過程,可以設置定時或者由 GitHub 事件觸發。Workflow 文件採用 YAML 格式定義,存放在代碼倉庫的 .github/workflows 目錄下。一個代碼倉庫可以有多個 Workflow 文件,GitHub 識別到目錄下的 .yaml 文件,就會並行執行這些 Workflow。
  • Job:一個 Workflow 由多個 Job 構成。默認 Job 會併發執行,也可以設置 Job 順序執行,實現有前後邏輯依賴的 Workflow。
  • Step:一個Job 由多個 Step 構成。同一個 Job 下的 Step 會在一個 Runner 上執行,保證環境及數據的共享。
  • Action:一個 Step 由多個 Action 構成。Action 是獨立的命令集,也基於 YAML 代碼定義的,開發者可以像代碼一樣編輯、重用以及共享。

以下是一個簡單的 GitHub Action Workflow 示例,定義了由兩個 Step 組成的 Job。其中,第一個 Step 複用了社區的 actions/checkout@v2 模板,執行當前代碼庫的檢出,第二個 Step 則直接執行了 Bash 命令。

name: Greeting
on: push

jobs:
  my-job:
    name: My Job
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2
      
    - name: Greeting
      run: |
        echo 'Welcome to Alibaba Cloud!'

GitHub 與阿里雲聯合發佈的 GitHub Action Worflow,定義了多個 Step,支持快速構建及部署至阿里雲容器服務 ACK。具體 Workflow 的定義,可參考鏈接:http://t.tb.cn/60eKsjLUTOKijV4NjGizeq

2. 關於阿里雲容器服務

如果說 GitHub Action 是實踐 DevOps 的瑞士軍刀,那麼阿里雲容器服務就是落地雲原生 DevOps 的最佳界面,功能豐富又便捷易用。阿里雲容器服務 ACK(Alibaba Cloud Container Service for Kubernetes)是全球首批通過 Kubernetes 一致性認證的服務平臺,提供高性能的容器應用管理服務,支持企業級 Kubernetes 容器化應用的生命週期管理。ACK 在阿里集團內作爲核心的容器化基礎設施,有豐富的應用場景和經驗積累,包括電商、實時音視頻、數據庫、消息中間件、人工智能等場景,支撐廣泛的內外部客戶的 雙11 活動。同時,容器服務將阿里內部各種大規模場景的經驗和能力融入產品,向公有云客戶開放,提升了更加豐富的功能和更加突出的穩定性,容器服務連續多年保持國內容器市場份額第一。

圖 3 - 阿里雲容器服務產品家族

在應用管理領域,針對阿里的大規模實踐和企業的豐富生產實踐,阿里雲進一步增強了可靠性、安全性,並且提供可賠付的 SLA 的 Kubernetes 集羣 - ACK Pro 版。ACK Pro 版集羣是在原 ACK 託管版集羣的基礎上發展而來的集羣類型,繼承了原託管版集羣的所有優勢,例如 Master 節點託管、Master 節點高可用等。同時,相比原託管版進一步提升了集羣的可靠性、安全性和調度性能,並且支持賠付標準的 SLA,適合生產環境下有着大規模業務,對穩定性和安全性有高要求的企業客戶。

在應用製品管理領域,面向安全及性能需求高的企業客戶,阿里雲推出容器鏡像服務企業版 ACR EE,提供公共雲首個獨享實例的企業級服務。ACR EE 除了支持多架構容器鏡像,還支持多版本 Helm Chart、Operator 等符合 OCI 規範製品的託管。在安全治理部分,ACR EE 提供了網絡訪問控制、安全掃描、鏡像加簽、安全審計等多維度安全保障,助力企業從 DevOps 到 DevSecOps 的升級。在全球分發加速場景,ACR EE 優化了網絡鏈路及調度策略,保障穩定的跨海同步成功率。在大鏡像規模化分發場景,ACR EE 支持按需加載,實現鏡像數據免全量下載和在線解壓,平均容器啓動時間降低 60%。目前已有衆多企業生產環境模使用 ACR EE,保障企業客戶雲原生應用製品的安全託管及多場景高效分發。

如果你在容器鏡像的使用方面有什麼問題,歡迎點擊填寫調查問卷,我們將隨機挑選 10 位參與者,贈送阿里雲容器鏡像服務(企業版)ACR EE 優惠券

基於 GitHub Action + ACK 構建雲原生 DevOps 實踐

下面將基於 GitHub Action 演示,如何將一個簡單 Nginx 應用打包成容器鏡像,託管至阿里雲容器鏡像服務 ACR,再自動化部署至阿里雲容器服務 ACK,快速便捷地實現 CI/CD 流程。GitHub Action Demo 地址參考:http://yli16.cn/LAZxC,您可以更新對應 Yaml 文件,實現自定義業務場景。

圖 4 - 基於 GitHub Action 的 DevOps 流程

1. 前期準備

  • 開通阿里雲容器鏡像服務 ACR,創建命名空間及鏡像倉庫,參考文檔。如果您有強安全及高性能分發需求,建議使用 ACR EE 企業版實例,參考文檔。
  • 開通阿里雲容器服務 ACK,在 ACK 上創建一個集羣,參考文檔。如果您有強安全及高性能需求,建議使用 ACK PRO,參考文檔。
  • 開通 GitHub 並創建倉庫,代碼倉庫中有業務代碼也包含應用部署的模板 Yaml,可參考代碼示例。

2. 實踐過程

1)創建 Workflow

在 GitHub 代碼倉庫中,點擊 Actions 的 Tab 頁面,會有基於當前 GitHub 項目內容推薦的 Workflow,選擇部署至阿里雲 ACK 的 Workflow 模板。

圖 5 - GitHub 倉庫內置 Actions

圖 6 - 選擇部署至阿里雲 ACK 的 Workflow

GitHub Action 默認會在代碼倉庫 .github/workflows目錄下創建 alibabacloud.yml 文件。在 YAML 文件中定義監聽代碼發佈 Release 事件,一旦事件發生就會自動觸發後續集成部署的流程。您也可以搜索右側市場中相關的 Action,自定義 Job 中的 Action 步驟。

2)更新 Workflow 中變量信息

在 Workflow 中定義了 env 環境變量,需要按照實際情況更新對應的地域、容器鏡像服務、容器服務集羣等信息。ACCESS_KEY_ID 和 ACCESS_KEY_SECRET 定義了阿里雲賬號 AK 信息,需要以密文形式設置在倉庫對應的 Secrets 中。

 

 

圖 7 - 更新 Worflow 中對應的環境變量

 

圖 8 - 更新 Secrets 信息

3)自動部署

配置完成後,默認當有一個 Release 發佈後,會自動觸發 GitHub Action 執行任務。點擊 Actions 按鈕,可以看到對應的任務執行歷史和詳情。整個工作流是順序執行的,一旦其中某個任務執行失敗後,整個工作流都將終止執行。可實現容器鏡像推送至 ACR 後,發現有高危安全漏洞,立即取消後續容器部署至 ACK 流程。當構建、安全掃描及部署流程順利完成,則在 ACK 上會基於新的容器鏡像生成一個 nginx 服務。將安全風險識別及決策內置全鏈路中,實踐安全高效的 DevSecOps 流程。

圖 9 - Workflow 執行歷史

4)擴展

您可以在 GitHub Action Marketplace 上尋找需要的 Action 任務模板,來實現自定義的 Workflow 流程。目前,GitHub Action 上已經有豐富的 Action 模板,覆蓋了多種語言的代碼依賴、代碼集成、代碼質量等多種場景。可以基於模板快速構建出一個支持多操作系統及多語言框架下的 Workflow 矩陣,並行測試項目的多個版本。

圖 10 - GitHub Action Marketplace

指引雲原生時代落地 DevOps 的新路徑

相較於傳統的 Jenkins 工具,GitHub Action 是 SaaS 化託管服務,無需部署及插件運維。只需簡單定義或複用官方 Workflow,即可實現便捷的 CI/CD 場景。相較於 Travis CI /Circle CI,GitHub Action 是 GitHub 推出的原生工具,集成體驗及靈活性更佳,並且有更豐富的 Action Marketplace 生態支持,讓用戶可以更便捷複用及自定義 Workflow。

如今 GitHub Action 也內置支持了自動構建推送阿里雲容器鏡像服務 ACR,自動部署阿里雲容器服務 ACK 的 Workflow,指引雲原生時代落地 DevOps 的新路徑。希望可以幫助更多企業在享受雲原生技術紅利的同時,加速完成企業級的數字化轉型和架構升級。

作者 | 瑤靖

原文鏈接

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

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