何謂 CI/CD ? 利用 Github Actions 做一個簡單的 CI/CD
前一陣子公司內部興起了 DevOps 文化,目的讓所有人都必須要了解跟 DevOps 相關的一些概念、工具,甚至是實作。前陣子也剛好試玩了一下 Github Actions,用這個機會來記錄一下相關的一些細節。
CI/CD
何謂 CI/CD? 這也不是一個新名詞了,全名是 Continuous Integration and Continuous Deployment,也就是持續整合與持續部署。簡單來說,就是把一些日常的建置環境、測試、build,一直到部署都交給自動化的工具,目的除了加快開發流程之外,也可以提早發現問題。
身為一個軟體工程師,為了提高日常工作效率,不把時間浪費在不需要的事情上,不論前端後端甚至DevOps工程師,CI/CD 都是在開發過程中非常重要的一環。
CI (Continuous Integration)
CI 顧名思義為「持續整合」,在每次的 Commit and Push 時,經過各項的測試,與完成後的 build code,讓每一次的小改變都可以馬上經過自動化的測試驗證,藉此快速幫助開發者找出潛在或是被忽略的問題,並且產生可靠性的 build 以供正式版本使用。
CD (Continuous Deployment)
CD 指的是「持續部署」,透過自動化流程將 CI 產出的 build,部署到我們服務的環境或是伺服器上,減少花費人工手動 deploy 的時間,也會透過一些 moniter 的工具來確保我們的服務有正常在運作。
常用工具
市面上其實有很多 CI/CD 工具,最廣為人知且最多人在使用的應該就是老牌的 Jenkins
了,前公司與目前公司也都是使用它,而其他還有 Travis CI
與 GitLab CI/CD
等等,有使用 CI/CD 的需求可以研究並使用看看哪一套比較符合你的使用需求。
Github Actions
Github Actions 是 Github 在 2019 年才推出的 CI/CD 服務,相較於老牌的一些 CI/CD 要年輕了許多,相對的可能支援度也還沒有到很全面,但對於想在 Github 上小專案做簡單 CI/CD, 相較於 Jenkins 還要安裝到一台 Server 上,Github Actions 可以直接在 Github 上操作,應該會是最方便又比較快速上手的工具了。
Github Actions 簡述
對於 Github Actions 有幾個重要的核心概念:
Actions/commands
Actions/commands
可以說是在 Github Actions 中的最小單位,可以用來組合成各種的 steps
來建立你要自動化的 jobs
。
Step
由多個 action
或是 command
組合成的 step
,用來定義每一個自動化流程的步驟。
Job
多個 step
組成 job
,透過 job
定義不同 scope 的任務,比如說可以分為測試的 job 與 build code 的 job 來執行,執行順序會根據你寫在 yaml 檔案中的順序來執行。
Workflow
Workflow 是整個自動化的流程,一個自動化流程可能包含多個 job
,就要看你的自動化流程怎麼設計了。
開始一個 Workflow 吧
要建立一個 workflow 其實不難,直接到 repo 裡面的 Actions
這個 tab,裡面有各式各樣的 template 可以使用,可以直接到 Marketplace 裡面去找符合需求的,當然也可以從自己建立一個新的 yaml file 開始。
那在這裡我們就用簡單的 Todo List,來建立一個在發 PR 的時候,自動驗證測試有沒有通過的 pipeline。
假如是自己建立的,記得要在 .github/
底下的 workflows/
放上你的 workflow yaml 檔案喔。
- name: 這個 workflow 的名稱
- on: 決定這個 workflow 觸發的條件
- jobs: 裡面定義各種要執行的
jobs
,ex:test
就是其中一個 job 的名稱 - runs-on: 決定要運行在哪一個平台上
- steps: 就如同前面所介紹的,這裡的
steps
定義這個job
的步驟,而每一個在steps
底下的name
就是一個step
,使用run
來決定要執行的actions/commands
。
定義好之後,只要推到 Github repo 上,符合定義的 on
條件就會自動開始執行,很容易就可以建立簡單的 pipeline 囉!
在沒有跑完 workflow 的情況下,在 PR 裡面會顯示你的 workflow 還正在進行,如果有定義好,在完成前是可以不讓大家去做 merge 的動作的,當然 admin 除外。
以上就是使用 Github Actions 製作的簡單 pipeline,當然他還可以做到很多功能,像是設定 schedule job 或是去整合第三方的 deploy (ex: AWS、GCP 等等),可以直接去參考官方文件,或是找找 marketplace 的範例來試試看囉!
如果你覺得這篇文章對你有幫助,歡迎買杯咖啡贊助 ☕️ 謝謝