前言
各位讀者,新年快樂,我是過了年匆忙趕回上海努力搬磚的蠻三刀。
Github之前更新了一個Action功能(應該是很久以前了),可以實現很多自動化操作。用來替代使用者自己設定的自動化指令碼(比如:鉤子+Jenkins)。
由於平時根本不會有需求用到它,畢竟平時都在用公司的CI/CD流程,所以一直沒有機會玩Action。
藉著春節放假,就自己寫個小Demo體驗一下。
本文通過實現一個提交程式碼後自動執行Junit單元測試並輸出測試報告的自動化流程小Demo,來快速上手Github Action。
Github Action 是什麼?
如果你對Github Action完全沒有概念,我推薦先去看一下CI/CD(持續整合/持續交付)的概念:
https://www.redhat.com/zh/topics/devops/what-is-ci-cd
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/awesome-utils
這是一個Maven倉庫,我們在test資料夾內加入測試程式碼。
上面的測試程式碼測試的是下面的一個靜態方法:
提交程式碼,觸發Github Action執行
將程式碼commit並push後,點開你的倉庫主頁,點選Action標籤:
可以看到已經有了執行資訊。
接著看下我們的Action到底有沒有執行,點開Action標籤,已經發現了Junit:
可以進行指令碼程式碼的線上編輯:
點進本次commit執行的記錄,可以看到,action順利完成了幾個步驟:
點開Maven的構建日誌,可以看到我們第一次跑action,所有的依賴還是即時下載的:
單元測試執行的日誌輸出正常:
為了試驗Maven的依賴包是否能夠使用到快取,我們再寫幾個單元測試,然後commit:
可以看到,新的action日誌裡直接開始了編譯,不再需要下載全量的包:
單元測試頁成功執行:
至此,我們的簡易入門教程便結束了。
還有很多功能等待探索
當然,這還只是Action的冰山一角,其能做的事情遠不止於此:
- 編譯打包程式碼
- 自動上傳至公有云/App容器
- 單元測試/程式碼覆蓋率測試/文件同步/釋出版本
等著你們的探索。
參考
http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
關注我
我是一名奮鬥在一線的網際網路後端開發工程師。
平時主要關注後端開發,資料安全,邊緣計算等方向,歡迎交流。
各大平臺都能找到我
- 微信公眾號:後端技術漫談
- Github:@qqxx6661
- CSDN:@蠻三刀把刀
- 知乎:@後端技術漫談
- 掘金:@蠻三刀把刀
- 騰訊雲+社群:@後端技術漫談
- 部落格園:@後端技術漫談
- BiliBili:@蠻三刀把刀
原創文章主要內容
- 後端開發實戰
- 後端技術面試
- 演算法題解/資料結構/設計模式
- 生活感悟
個人公眾號:後端技術漫談
如果文章對你有幫助,求各位大佬點贊支援一下,你的點贊和在看是我更新的動力~