Github Actions 是 Github 提供的 CI/CD 服務,CI/CD 代表的是 Continuous Integration 持續整合與 Continuous Deployment 持續部署 ,講白話一點就是將程式流程自動化,例如在 push 到 repo 後自動 build、自動跑測試、自動部署,如今 CI/CD 已經成為軟體開發不可或缺的技術。
為了使用 GitHub Actions,我們必須定義一個工作流程。工作流程基本上是由一個或多個工作組成的自動化程序。
events
。Scheduled
)。Manually
)。Github
ci.yaml
:
.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
GitHub Actions 提供了一種自動化工具,稱為 "Runner",來執行 CI/CD 工作流程中的工作。Runner 是一台伺服器,它會持續監聽 GitHub,等待可用的工作,並執行這些工作。
GitHub** hosted **Runner**:
GitHub 提供了一些預先配置的 Runner,稱為 GitHub 托管的 Runner。這些 Runner 運行在 GitHub 的雲端環境中,支援多種作業系統,如 Ubuntu、Windows 和 macOS。self hosted
Runner
:除了使用 GitHub 托管的 Runner,用戶也可以在自己的伺服器上設置和運行 Runner。這稱為自託管的 Runner。它允許用戶在特定的環境或內部網絡中執行工作,對於需要自定義環境或高度安全性的情境非常有用。job
)。如果有多個工作等待執行,它們將會在隊列中等待,直到 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
GitHub Actions 允許您自動化、自定義並執行軟體開發工作流程(workflows)在您的 GitHub 儲存庫(repository)中。在這工作流程中,工作(job)是一組要在同一運行器(runner)上執行的一系列步驟(step)。
runs-on
關鍵字指定的。例如,可以指定工作在 Ubuntu、Windows 或 macOS 運行器上運行。needs
to set dependencies.)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
Step
是工作(Job)內的個別任務,這些任務會序列地、依序運行。step
只能包含一個 action
或一個 run
指令。steps:
- name: 多個指令的步驟
run: |
echo "第一個指令"
echo "第二個指令"
echo "第三個指令"
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