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

頭圖.png

做者 | 瑤靖
來源 | 阿里巴巴雲原生公衆號html

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

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

1.jpg

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

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

1. 關於 GitHub Acticon

2.jpg
圖 2 - GitHub Action 首頁數據庫

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

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.jpg

圖 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,保障企業客戶雲原生應用製品的安全託管及多場景高效分發。

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

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

4.jpg

圖 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.jpg

圖 5 - GitHub 倉庫內置 Actions

6.jpg

圖 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.jpg

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

8.jpg

圖 8 - 更新 Secrets 信息

3)自動部署

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

9.jpg

圖 9 - Workflow 執行歷史

4)擴展

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

10.jpg

圖 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 的新路徑。但願能夠幫助更多企業在享受雲原生技術紅利同時,加速完成企業級的數字化轉型和架構升級。

相關文章
相關標籤/搜索