何謂 CI/CD ? 利用 Github Actions 做一個簡單的 CI/CD

Sean Chou
Recording everything
7 min readJun 14, 2021

--

from: Github

前一陣子公司內部興起了 DevOps 文化,目的讓所有人都必須要了解跟 DevOps 相關的一些概念、工具,甚至是實作。前陣子也剛好試玩了一下 Github Actions,用這個機會來記錄一下相關的一些細節。

CI/CD

https://blog.itil.org/2016/07/wort-zum-montag-cd-continous-delivery/

何謂 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 的工具來確保我們的服務有正常在運作。

常用工具

from: Jenkins

市面上其實有很多 CI/CD 工具,最廣為人知且最多人在使用的應該就是老牌的 Jenkins 了,前公司與目前公司也都是使用它,而其他還有 Travis CIGitLab CI/CD 等等,有使用 CI/CD 的需求可以研究並使用看看哪一套比較符合你的使用需求。

Github Actions

from: Github

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 開始。

Actions 的進入頁面,可以選擇需要的 template
預設會幫你建立好的 main.yaml

那在這裡我們就用簡單的 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 囉!

進入 actions 就可以看到正在運行的 workflow
也可以很清楚看到目前走到哪一步

在沒有跑完 workflow 的情況下,在 PR 裡面會顯示你的 workflow 還正在進行,如果有定義好,在完成前是可以不讓大家去做 merge 的動作的,當然 admin 除外。

全部的 step 都完成
merge 的按鈕也會轉成綠色

以上就是使用 Github Actions 製作的簡單 pipeline,當然他還可以做到很多功能,像是設定 schedule job 或是去整合第三方的 deploy (ex: AWS、GCP 等等),可以直接去參考官方文件,或是找找 marketplace 的範例來試試看囉!

如果你覺得這篇文章對你有幫助,歡迎買杯咖啡贊助 ☕️ 謝謝

--

--