iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0

Github Action

Github Actions 是 Github 提供的 CI/CD 服務,CI/CD 代表的是 Continuous Integration 持續整合與 Continuous Deployment 持續部署 ,講白話一點就是將程式流程自動化,例如在 push 到 repo 後自動 build、自動跑測試、自動部署,如今 CI/CD 已經成為軟體開發不可或缺的技術。

https://ithelp.ithome.com.tw/upload/images/20231001/201217469U1jsae7ve.png

  1. 自動化工作流程:GitHub Actions 可以根據各種事件觸發工作流程,例如 push、pull request 或特定的標籤操作。
  2. 內建於 GitHub:開發者不需要離開 GitHub 環境或使用第三方服務就能構建、測試和部署應用程式。
  3. 跨平台支持:可以在多種操作系統上運行任務,包括 Windows、Linux 和 macOS。
  4. 容器支持:允許使用 Docker 容器來執行工作流程。
  5. Matrix Builds:能夠輕鬆地在多個版本或配置的組合中運行測試。
  6. 市場集成:GitHub 市場上有許多預先建立的 Actions,可以加速設定工作流程的速度。
  7. 我們可以透過三種方式觸發工作流程:事件、預定時間或手動。
  8. 一個工作流程由一個或多個工作組成。
  9. 一個工作包含多個步驟。
  10. 每個步驟可以有1個或多個動作。
  11. 工作流程中的所有工作通常會並行運行,除非它們彼此相互依賴,在這種情況下,它們會串行運行。
  12. 每個工作將由特定的執行器分開運行。
  13. 執行器將回報工作的進度、日誌和結果到github。我們可以直接在GitHub儲存庫的UI上查看它們。

適合使用情境

  • 自動運行單元測試或集成測試。
  • 在合併到主分支之前檢查代碼質量。
  • 當代碼推送到主分支或標籤時,自動部署到生產或開發環境。
  • 定期執行某些腳本或任務,例如數據備份。
  • 自動生成和發布軟體的新版本。

Workflow

為了使用 GitHub Actions,我們必須定義一個工作流程。工作流程基本上是由一個或多個工作組成的自動化程序。

  • 它可以通過以下三種方式之一來觸發:
    1. 通過在 GitHub Repo上發生的events
    2. 通過設定重複性的排程(Scheduled)。
    3. 或是手動Trigger 使用者界面上的「運行工作流程」按鈕(Manually)。
  • Github ci.yaml :
    • made up of 1+ jobs
    • Add .YML File to Repository .github/workflows
# 定義工作流程的名稱為 "build-and-test"
name: build-and-test

# 定義何時觸發這個工作流程
on:
  # 當有新的提交被推送到 "master" 分支時
  push:
    branches: [ master ]
  
  # 根據定義的時間表觸發,這裡的定義是每15分鐘
  schedule:
    - cron: '*/15 * * * *'
  
  # 允許手動從 GitHub 的 UI 啟動這個工作流程
  workflow_dispatch:

# 定義這個工作流程中的工作
jobs:
  # 這個工作的名稱為 "build"
  build:
    # 定義這個工作要在哪個環境上運行,這裡是最新版本的 Ubuntu
    runs-on: ubuntu-latest

https://ithelp.ithome.com.tw/upload/images/20231001/20121746jbk3sL6I25.png

Runner

GitHub Actions 提供了一種自動化工具,稱為 "Runner",來執行 CI/CD 工作流程中的工作。Runner 是一台伺服器,它會持續監聽 GitHub,等待可用的工作,並執行這些工作。

  1. 工作執行環境:Runner 提供了執行工作所需的環境。當工作流程被觸發時,它會在 Runner 上運行。
  2. **GitHub** hosted **Runner**:GitHub 提供了一些預先配置的 Runner,稱為 GitHub 托管的 Runner。這些 Runner 運行在 GitHub 的雲端環境中,支援多種作業系統,如 Ubuntu、Windows 和 macOS。
  3. self hosted Runner:除了使用 GitHub 托管的 Runner,用戶也可以在自己的伺服器上設置和運行 Runner。這稱為自託管的 Runner。它允許用戶在特定的環境或內部網絡中執行工作,對於需要自定義環境或高度安全性的情境非常有用。
  4. 單工作執行:每個 Runner 同時只能執行一個工作(job)。如果有多個工作等待執行,它們將會在隊列中等待,直到 Runner 可用。
  5. 回報給 GitHub:Runner 會將進度、日誌和結果回報到 GitHub,讓用戶可以即時了解每個工作的狀態。
  6. 指定 Runner:在工作流程定義中,用戶可以使用 runs-on 指令來指定想要使用的 Runner 類型,例如 ubuntu-latest 或自託管的特定 Runner。
.github/workflows/ci.yml

name: build-and-test

on:
	push:
		branches: [ master ]
	schedule:
		- cron: '*/15 * * * *'

jobs:
	build:
		runs-on: ubuntu-latest
		steps:
			- name: Check out code
				uses: actions/checkout@v2
			- name: Build server
				run: ./build_server.sh
    test:
			needs: build
			runs-on: ubuntu-latest
			steps:
				- run: ./test_server.sh

https://ithelp.ithome.com.tw/upload/images/20231001/20121746Zp8JvhTs5q.png

Job

GitHub Actions 允許您自動化、自定義並執行軟體開發工作流程(workflows)在您的 GitHub 儲存庫(repository)中。在這工作流程中,工作(job)是一組要在同一運行器(runner)上執行的一系列步驟(step)。

  1. 組成:每個工作由一或多個步驟(steps)組成。這些步驟可以是執行命令、運行腳本或使用 GitHub Actions 社區提供的動作(actions)。
  2. 環境:工作可以在特定的操作系統上運行,這是通過 runs-on 關鍵字指定的。例如,可以指定工作在 Ubuntu、Windows 或 macOS 運行器上運行。
  3. 依賴性:可以指定工作的執行順序,例如,某個工作可能需要在另一個工作完成後才能開始。(Use needs to set dependencies.)
  4. 狀態:工作可以成功、失敗或被取消。如果某個工作失敗,則整個工作流程(workflow)可能會停止,除非工作流程中有特定的設定來處理失敗。
  5. 日誌:工作在執行時會產生日誌,方便用戶查看和調試。
  6. 通常情況下,job是並行運行的。
jobs:
	build:
		runs-on: ubuntu-latest
		steps:
			- name: Check out code
				uses: actions/checkout@v2
			- name: Build server
				run: ./build_server.sh
    test:
			needs: build
			runs-on: ubuntu-latest
			steps:
				- run: ./test_server.sh

https://ithelp.ithome.com.tw/upload/images/20231001/20121746IKMGj5m7nD.png

Step

  • Step是工作(Job)內的個別任務,這些任務會序列地、依序運行。
  • 一個 step 只能包含一個 action 或一個 run 指令。
steps:
  - name: 多個指令的步驟
    run: |
      echo "第一個指令"
      echo "第二個指令"
      echo "第三個指令"

Action

  • Action基本上是一個獨立的命令,一個步驟中包含多個動作,它們將會序列地、依序運行。
.github/workflows/ci.yml

jobs:
	build:
		runs-on: ubuntu-latest
		steps:
			- name: Check out code
				uses: actions/checkout@v2
			- name: Build server
				run: ./build_server.sh

https://ithelp.ithome.com.tw/upload/images/20231001/20121746W3ZvcxjSnJ.png


上一篇
[Day 15] Summary about relationship between isolation levels and read phenomena
下一篇
[Day 17] Setup a workflow for Golang and Postgres in Github Action
系列文
Techschool Goalng Backend Master Class 的學習記錄31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言