Github Action 快速上手指南

前言

各位讀者,新年快樂,我是過了年匆忙趕回上海努力搬磚的蠻三刀。html

Github以前更新了一個Action功能(應該是好久之前了),能夠實現不少自動化操做。用來替代用戶本身設置的自動化腳本(好比:鉤子+Jenkins)。python

因爲平時根本不會有需求用到它,畢竟平時都在用公司的CI/CD流程,因此一直沒有機會玩Action。git

藉着春節放假,就本身寫個小Demo體驗一下。github

本文經過實現一個提交代碼後自動執行Junit單元測試並輸出測試報告的自動化流程小Demo,來快速上手Github Action。面試

Github Action 是什麼?

若是你對Github Action徹底沒有概念,我推薦先去看一下CI/CD(持續集成/持續交付)的概念:算法

https://www.redhat.com/zh/top...ubuntu

Github Action官方文檔中對自身的定義:後端

在 GitHub Actions 的倉庫中自動化、自定義和執行軟件開發工做流程。 您能夠發現、建立和共享操做以執行您喜歡的任何做業(包括 CI/CD),並將操做合併到徹底自定義的工做流程中。

用人話說,就是你能夠給你的代碼倉庫部署一系列自動化腳本,在你進行了提交/合併分支等操做後,自動執行腳本。設計模式

阮一峯Github Action指南中的介紹:緩存

你們知道,持續集成由不少操做組成,好比抓取代碼、運行測試、登陸遠程服務器,發佈到第三方服務等等。GitHub 把這些操做就稱爲 actions。

不少操做在不一樣項目裏面是相似的,徹底能夠共享。GitHub 注意到了這一點,想出了一個很妙的點子,容許開發者把每一個操做寫成獨立的腳本文件,存放到代碼倉庫,使得其餘開發者能夠引用。

若是你須要某個 action,沒必要本身寫複雜的腳本,直接引用他人寫好的 action 便可,整個持續集成過程,就變成了一個 actions 的組合。這就是 GitHub Actions 最特別的地方。

GitHub Actions 有一些本身的術語:

  • workflow (工做流程):持續集成一次運行的過程,就是一個 workflow。
  • job (任務):一個 workflow 由一個或多個 jobs 構成,含義是一次持續集成的運行,能夠完成多個任務。
  • step(步驟):每一個 job 由多個 step 構成,一步步完成。
  • action (動做):每一個 step 能夠依次執行一個或多個命令(action)。

看這些介紹和定義,其實比較枯燥,咱們直接來看代碼實現,在代碼中來理解這些定義和指令。

快速上手

給倉庫建立新文件夾.github/workflow

首先,用你本身的任意GitHub倉庫,在倉庫內添加文件夾.github/workflow 或者.github/workflows

一個庫能夠有多個 workflow 文件。GitHub 只要發現.github/workflows目錄裏面有.yml文件,就會自動運行該文件。

撰寫你的workflow

一個yml腳本即是Action的核心了,咱們新建一個blank.yml,內容以下:

我在代碼裏作了一些註釋,幫助你們理解每一個指令的含義。

整個腳本大體的流程以下:

  • 指定在push或者pull request時觸發腳本執行
  • 拉取ubuntu最新版的鏡像
  • 緩存Maven依賴目錄,避免每次都下載全量依賴包,加快執行速度
  • 安裝Java8
  • 指定pom.xml文件路徑,隨後用Maven編譯項目
  • 運行Junit單元測試

給項目撰寫單元測試代碼

ok,寫完腳本,咱們須要來編寫一些測試代碼,讓Junit有事可作。

我使用了本身的一個倉庫,上面有完整的action腳本和測試類代碼,供參考:

https://github.com/qqxx6661/a...

這是一個Maven倉庫,咱們在test文件夾內加入測試代碼。

上面的測試代碼測試的是下面的一個靜態方法:

提交代碼,觸發Github Action執行

將代碼commit並push後,點開你的倉庫主頁,點擊Action標籤:

能夠看到已經有了執行信息。

接着看下咱們的Action到底有沒有執行,點開Action標籤,已經發現了Junit:

能夠進行腳本代碼的在線編輯:

點進本次commit執行的記錄,能夠看到,action順利完成了幾個步驟:

點開Maven的構建日誌,能夠看到咱們第一次跑action,全部的依賴仍是即時下載的:

單元測試運行的日誌輸出正常:

爲了試驗Maven的依賴包是否可以使用到緩存,咱們再寫幾個單元測試,而後commit:

能夠看到,新的action日誌裏直接開始了編譯,再也不須要下載全量的包:

單元測試頁成功執行:

至此,咱們的簡易入門教程便結束了。

還有不少功能等待探索

固然,這還只是Action的冰山一角,其能作的事情遠不止於此:

  • 編譯打包代碼
  • 自動上傳至公有云/App容器
  • 單元測試/代碼覆蓋率測試/文檔同步/發佈版本

等着大家的探索。

參考

https://docs.github.com/cn/ac...

http://www.ruanyifeng.com/blo...

關注我

我是一名奮鬥在一線的互聯網後端開發工程師。

平時主要關注後端開發,數據安全,邊緣計算等方向,歡迎交流。

各大平臺都能找到我

原創文章主要內容

  • 後端開發實戰
  • 後端技術面試
  • 算法題解/數據結構/設計模式
  • 生活感悟

我的公衆號:後端技術漫談

我的公衆號:後端技術漫談

若是文章對你有幫助,求各位大佬點贊支持一下,你的點贊和在看是我更新的動力~

相關文章
相關標籤/搜索