GitHub Actions 集成CI/CD功能,推進開發編譯測試部署流程自動化
機器之心報道
參與:一鳴、張倩
開發者除了開發程序代碼之外,有時候需要面對各種編譯、測試和部署過程中的繁瑣流程。這些流程往往需要手動完成,且由於不同開發者的開發環境、版本和平台不同,需要專門針對特定的環境定製工作流,因此阻礙了開源代碼在社區中的傳播。現在,這一切可能會自動化地完成了。近日,GitHub Actions,一個讓開發者自動化實現定製化工作流邏輯的平台,集成了持續集成和交付(CI/CD)功能,可以讓開發者自動化完成一系列工作流。
GitHub 今天開源了一個新版 GitHub Actions 的測試版,該版本內置了持續集成和交付(CI/CD)功能。CI/CD 是開發人員在同一個項目中將更改合併和集成到代碼庫中而不產生衝突的一種方法。整個平台計劃於 11 月 13 日正式發布。
新版 Actions 的特性包括:
- 跨平台多語言支持的測試環境
- 自動化代碼構建和部署工作流
- 可復用的 action 和工作流文件
- 實時顯示運行結果
- 自動構建集成化的包和容器庫
- 基於機器學習的建議工作流
- 對公開代碼庫免費的定價策略
Actions 平台是什麼
GitHub Actions 是微軟於 2018 年秋季推出的一個平台。這一平台可以讓開發者實現定製化的程序邏輯,而不需要專門創建一個應用去完成需要的任務。開發者可以藉助 Actions 平台建立工作流,使用他們代碼倉庫中定義好的 action、或者 GitHub 公開代碼庫中的 action,甚至是一個公開的 Docker 容器鏡像。action 在這裡指的是開發、測試、部署和發布代碼中的各種流程,舉個例子,一個 action 可以是公開發布某個 npm 模塊,在創建緊急 issue 時為開發者發送 SMS 警告,或者部署生產流程中的代碼的過程。這些工作流程過去需要開發者自己去手動實現。現在有了 Actions 平台後,藉助 Actions 平台和 GitHub 中百萬級別的公開庫,任何一個開發者都可以直接建立上述工作流程,不需要專門去創建實現這些 action 的應用了。此外,開發者創建的工作流也可以分享給 GitHub 社區供其他人使用。
能夠實現這樣的功能是因為,GitHub Actions 平台是定製化的,可以使用 GitHub 的 API 和任何開源的第三方 API,以便於和代碼庫進行交互。當開發者把存儲庫中的代碼轉換成一個 action 時,只需為它編寫一個 Docker 文件。Docker 文件可以被 GitHub 構建運行,並鏈接到工作流程中。此外,GitHub 還提供了一個可視化編輯器,用於幫助開發者在不使用 Docker 的情況下構建工作線程。
在 2018 年 Actions 平台剛建立的時候,就已經有很多 action 保存在 GitHub 上了,總數已超過 9600 萬個。海量的公開代碼庫是 GitHub 開源這一平台的技術基礎。
Actions 平台對開發者的意義
對於開發者而言,Actions 最大的意義在於自動化了代碼開發之外的很多流程。
熟悉 GitHub、程序編譯、部署、發布流程的開發者朋友應該知道,開發過程中有許多目前無法自動化的環節。例如,在項目開源時,出現了各種 issue 和 merge 請求,需要開發者手動管理。在源代碼編譯為程序時,需要集成各種依賴和相關的庫,其中需要管理各種各樣的編譯流程,為代碼創造合適的編譯環境。在部署程序前,需要在各個平台和各個版本進行測試,避免發生不兼容等問題。有了 Actions 平台後,開發者可以自己編寫工作流 YAML 文件,並藉助 Actions 平台完成上述工作。更重要的是,在發布自己的程序後,編譯、測試和部署的工作流也可以共享給其他開發者。其他開發者可以直接 fork 並運行,不再需要繁瑣的準備程序運行環境和安裝相關依賴。這些都加快了開源代碼的傳播,使開發者社區有了更緊密的聯繫和交流。
新版 Actions 的改進
在開源之初,Actions 平台的功能相對有限。首先,最初的公開的 Actions 只能在 Linux 平台上使用,而且只支持 Docker 容器。近日公開的新版本中,Actions 支持基本上所有的編程語言,因此也可以在多個平台上使用,如 Linux、Linux Container、Windows 和 macOS 等。此外,開發者也可以使用 Javascript 語言編寫 action 的代碼。這樣一來,受益的開發者更多了。此外,和 2018 年公開的版本相比,Actions 支持了更多的編程語言,包括主流的開發語言,如 Node.js、Python、Java、PHP、Ruby、C/C++、.NET,以及 Android 和 iOS 設備上的開發語言。
本次更新後,開發者在任何平台上構建、測試和發布代碼並在容器或虛擬機上運行他們的工作流。基於「矩陣構建(matrix builds)」功能,開發者可以同時在多個平台測試多個版本的項目,例如,可以同時在 Linux、macOS 和 windows 平台上測試三個不同版本的 Node.js 項目。因為 GitHub Actions 是基於 YAML 文件構建的,開發者只需要在文件中添加幾行代碼就可以完成設置,而 Actions 平台會完成剩下的工作。
另外,Actions 平台也集成了一個名為「建議工作流」的功能,由 GitHub 的機器學習團隊和其他公司內部從事自動化工作流開發的團隊打造。這一功能會為開發者提供構建工作流的建議。例如,開發者使用了一個 node 項目,則 Actions 平台會自動提供針對 node 項目的工作流建議。而 GitHub 官方仍在優化這一功能,希望為特定的項目提供特定的工作流建議。
這一功能背後使用了機器學習演算法。模型會首先分析公開 repo 中的代碼,並根據代碼進行預測。這樣一來,當開發者提交了某個代碼的時候,機器學習模型就可以預測出這種代碼會需要什麼樣的工作流。
根據官方提供的介紹,機器之心整理了 Actions 平台的新功能。
用動態日誌顯示實時運行結果
動態日誌可以在程序運行過程中顯示結果。GitHub 流可以將程序日誌導入到 Actions 的顯示框中,實時展示運行過程。
像運行代碼那樣創建和復用工作流
因為 GitHub Actions 的文件是代碼,開發者可以編輯、復用,或者像 fork 代碼那樣 fork 這些文件。特別是當開發者 fork 了一個代碼庫的時候,其中的 action 會和源代碼一樣被 fork。因此開發者可以像代碼提供者那樣進行測試和編譯工作。
如前文所述,action 是通過 YAML 文件進行定義和編輯的,因此開發者也可以在 YAML 文件中復用其他 action 和工作流。具體而言,開發者可以引用這些 action 和工作流,就像是在代碼倉庫中引用別的代碼一樣。同樣,每個開發者提供的 action 的文件可以被其他開發者復用,豐富了開發者社區。
對任意事件都可以構建的自動化工作流
同樣,GitHub Actions 可以自動化開發者管理代碼時使用的一些工作流。比如審核和管理 issue、自動發布新版本等。這些工作流通過 GitHub 上的事件自動觸發,能夠貫穿整個開發流程。任何 GitHub 應用現在都可以添加自己的定製化事件,因此開發者也可以根據需要為自己的每個項目定製不同的流程。
構建集成化的包和容器庫
在持續集成和部署中,發布包和容器是關鍵的一環,特別是發布開源庫或部署大型網路服務。GitHub Actions 簡化了發布流程。接入 Actions 平台的開發者同時也能夠接入 GitHub Package Registry,可以自動化從構建包到部署中間的所有工作流程。
建議工作流
前文提及,為了幫助開發者更快地構建和發布自己的代碼,GitHub Actions 集成了建議工作流功能。這一功能會為每個開發者的項目提供合適的工作流建議,方便上手。
定價策略
對於公開代碼庫,Actions 平台是免費的。對於私有倉庫,Actions 提供了簡單的定價策略,有興趣的開發者可以註冊使用 beta 測試版並了解價格。
Actions 的工作流程演示
根據 GitHub 官方提供的資料,機器之心整理了使用 Actions 工具的示例代碼。
矩陣構建
建立矩陣構建的 action 可以讓開發者在項目中並行測試多個版本的代碼。只需要在 Actions 的 YAML 文件中加入幾行代碼,GitHub 平台會代為執行剩餘的任務。
如下所示,可以在 YAML 文件中定義 node 的版本號(8、10、12),以及運行的平台(ubuntu-latest、windows-latest、macOS-latest),指定需要運行的代碼,剩餘的工作交由 GitHub 執行。
jobs:
test:
name: Test on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
node_version: [8, 10, 12]
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
version: ${{ matrix.node_version }}
- name: npm install, build and test
run: |
npm install
npm run build --if-present
npm test
微軟收購後的 GitHub
除了開源新工具以外,GitHub 今天還宣布,其平台上已有超過 4000 萬名開發人員,而 2018 年秋季和 2017 年這一數字分別為 3100 萬和 2400 萬。其用戶數量的迅速增長離不開一次又一次的更新。
GitHub 是一個面向開源 及私有軟體 項目的託管平台,於 2008 年 4 月正式上線。
2018 年 6 月,微軟宣布要以 75 億美元高價收購 GitHub,並於 10 月份正式完成這項交易。微軟開發者服務副總裁、Xamarin 創始人 Nat Friedman 出任 GitHub CEO。
在被微軟收購不久之後,GitHub 就開啟了首次重大變革——提供免費私有 Repo。這種定價策略的改變,可以幫助開發者節省很多使用成本。
此外,為了滿足用戶多元化的需求並提高社區的活躍度,GitHub 一直在推出各種更新。
今年 5 月份,GitHub 發布了一項重要更新——GitHub Package Registry,它可以幫助開發者們輕鬆查找、管理和發布確保項目正常運行的軟體包,而且對於個人用戶是免費的。
在同一個月,為了提高社區的活躍度,GitHub 還推出了「打賞」功能——GitHub Sponsors。為了啟動這一新項目並激發社區打賞積極性,GitHub 還推出了 GitHub Sponsors Matching Fund,每個開發者第一年最多可匹配到 5000 美元的贊助基金。此外,GitHub 還表示,為了表示對貢獻者的感謝,GitHub Sponsors 在用戶打賞其他開發者時不會收取平台費用。
今年 6 月份,GitHub 推出新功能 repository templates,幫助開發者在所有項目中重用代碼。該功能操作簡單,使用者只需將一個 repo 標記為 template,就可以立即使用 repository template 生成新的 repo,且新 repo 具備 template repo 的所有文件和文件夾。
※復旦大學提出中文分詞新方法,Transformer連有歧義的分詞也能學
※超越BigGAN,DeepMind提出「史上最強非GAN生成器」VQ-VAE-2
TAG:機器之心 |