Github Action 快速上手指南


前言

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

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容器
  • 單元測試/代碼覆蓋率測試/文檔同步/發布版本

等着你們的探索。

參考

https://docs.github.com/cn/actions/guides/building-and-testing-python#publishing-to-package-registries

http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html

關注我

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

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

各大平台都能找到我

原創文章主要內容

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

個人公眾號:后端技術漫談

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM