CI/CD(Github Action)


Posted by Ckoala on 2023-02-07

tags: 學習筆記

CI/CD

大多數企業採用敏捷開發,而在程式上傳到伺服器的過程中需要經過許多步驟,因此我們可以透過自動化來減少在一連串步驟中>的人為疏失,並加速整體開發流程。解決人類懶惰的天性

何謂CI/CD

  • CI(Continuous integration)持續整合or自動化整合
    將開發至一個階段性的程式碼(通常是版本控制的一個commit)經由自動化工具測試(unit test),協助檢查程式碼問題並建置出部屬的版本。

  • CD (Continuous Deployment)持續部署or自動化佈署
    CI完成後自動將程式更新到伺服器上運作,減少人工佈署的時間。
    好的CD包含監控系統進行服務存活檢查,並在發生異常時主動通知開發人員。

常見CI/CD工具

架設在本地端

  • Jenkins: 最古老的工具
    • 優點: 能夠自行編寫插件達成各式各樣功能
    • 缺點: 學習成本高、維護不易、設定檔難撰寫
  • Drone: 近年新出的工具,用Golang開發,會自動建立Docker執行流程並在完成後刪除
    • 優點: 較易學習、建置速度快、容量小、所有流程都在Docker內完成
    • 缺點: 套件不多
      ### 雲端
  • GitLab CI: 只能使用在GitLab
  • GitHub Action: 相對年輕的工具,只能用在Github

GitHub Action

文件
由repository內的yaml檔定義,在事件觸發時運行(可手動或排程)。
.github/workflows資料夾內建立*.yml即完成,會把結果用email寄信通知開發人員(目前已知觸發push時會傳送給push人員,其他條件寄信給誰尚不清楚,似乎是看用哪個帳號執行)

核心概念

Actions/commands

GitHub Actions的最小單位

# Actions
- name: Set up Go
  uses: actions/setup-go@v3
  with:
    go-version: 1.19

step

由Actions/commands組成,每個step代表自動化的一個步驟,

# steps
steps:
- uses: actions/checkout@v3

- name: Set up Go
  uses: actions/setup-go@v3
  with:
    go-version: 1.19

- name: Build
  run: go build -v ./...

- name: Test
  run: go test -v ./...

Job

由多個step組成,用來定義不同的任務,例如測試的job及deploy的job,所有job會同時執行,除非寫上條仵needsif

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Set up Go
      uses: actions/setup-go@v3
      with:
        go-version: 1.19

    - name: Build
      run: go build -v ./...

    - name: Test
      run: go test -v ./...
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    - name: Checkout
      uses: actions/checkout@v3

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ env.AWS_REGION }}
    ...

帳號密碼請勿寫在.yml檔內,所有能看到repository的人都能看到

  • 一般變數可設定在Enviroment Variables
  • 敏感資訊可設定在Secrets

上面兩項只有repository owner能設定。

Workflow

整個自動化流程,當中可能包含多個job。
在文仵開頭須定義workflow名稱(name)及觸發條仵(on)

name: Go-test # 可自行定義,主要目的是要能看出哪個workflow在執行

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

參考資料

CICD到底是什麼呢|全網最詳解


#devops #study-notes







Related Posts

Web開發學習筆記04—條件運算式(Conditional Statements)

Web開發學習筆記04—條件運算式(Conditional Statements)

C++ Header Guard 簡介

C++ Header Guard 簡介

GitHub

GitHub


Comments