Gitea的外部掛鉤vs工序執行器
Table of contents
背景
- 雖然這二者的觀念非常接近,也都需要伺服器承接指令,不論是外部或內部。
- 但前者因為銜接外部資源,用在主動聯繫方面的功能會很方便。
- 後者的強項是繁瑣的編譯整合,雖然也有發布的功能,但僅限靜態網頁或app上架,靈活度還是有限。
hook
和 act_runner
在持續整合/持續交付(CI/CD)環境中,hook
和 act_runner
是兩種不同的機制,分別用於觸發和執行 CI/CD 管線。它們在 Gitea 和 Jenkins 等工具中發揮不同的作用。以下是這兩者的詳細說明:
Hook
Hook 是一種在特定事件發生時自動觸發預定義操作的機制。在版本控制系統(如 Git)中,常見的鉤子有 pre-commit、post-commit、pre-receive 和 post-receive 等。這些鉤子可以在本地或遠端倉庫中配置。
Gitea 中的 Hook
Webhook:Gitea 支援 Webhook,當特定事件(如程式碼推送、合併請求)發生時,Webhook 可以傳送 HTTP POST 請求到指定的 URL。這通常用於觸發外部的 CI/CD 工具,如 Jenkins 或 GitLab CI。
Git Hook:Gitea 也支援 Git 本身的鉤子腳本,這些腳本在特定的 Git 事件發生時運行,例如 pre-receive、post-receive 鉤子。這些鉤子可以用來執行自訂的伺服器端邏輯,例如拒絕不符合規範的提交。
Act Runner
Act Runner 是一個用於執行 GitHub Actions 工作流程的本機執行器。它可以在本地環境中模擬 GitHub Actions 工作流程,非常適合在本地進行測試和偵錯。
Gitea 中的 Act Runner
Gitea 的 Act Runner 類似於 GitHub Actions,它允許你定義和執行工作流程,這些工作流程包含一個或多個步驟,可以執行各種 CI/CD 任務。
區別和用法
Hook
- 觸發機制:鉤子在特定事件發生時觸發,例如程式碼推送、合併請求。
- 執行環境:鉤子可以是本機 Git 倉庫中的腳本,也可以是遠端伺服器上設定的 Webhook。
- 用途:鉤子通常用於觸發外部系統的操作,例如通知 Jenkins 開始建置。
Act Runner
- 觸發機制:Act Runner 在收到特定事件的通知後執行預先定義的工作流程。
- 執行環境:Act Runner 可以在本地或指定的環境中運行,適用於模擬和調試 GitHub Actions 工作流程。
- 用途:Act Runner 主要用於執行複雜的 CI/CD 工作流程,包括程式碼建置、測試和部署等任務。
範例
使用 Webhook 觸發 Jenkins 構建
- 在 Gitea 中設定 Webhook:
- 導航至倉庫設定頁面。
- 點選 “Webhooks”。
- 新增一個新的 Webhook,URL 指向 Jenkins 的建置觸發 URL。
- 在 Jenkins 中設定對應的任務來處理 Gitea 的 Webhook 請求。
使用 Act Runner 執行工作流程
- 寫
.github/workflows/main.yml
檔案定義工作流程: ```yaml name: CI
on: [push]
jobs: build: runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js uses: actions/setup-node@v2 with: node-version: ‘14’
- name: Install dependencies run: npm install
- name: Run tests run: npm test ```
- 使用 Act Runner 在本地運行工作流程:
act
透過理解 hook
和 act_runner
的差異和用途,可以更好地選擇適合你的 CI/CD 流程的工具和配置。在實際專案中,你可以根據需求組合使用這些工具,以實現高效的持續整合和持續交付。
功能特色及取代性
是的,部分的 Hook 功能確實可以透過 Act Runner 這樣的工具來實現。兩者在某些情況下可以互補使用,但各自有其適用的場景和優點。以下是對兩者的對比和適用場景的進一步說明:
Hook
Hook 的主要功能是觸發預先定義的操作,通常用於以下場景:
- 即時觸發外部服務:如觸發 Jenkins 建置、通知聊天工具(如 Slack)、執行自訂腳本等。
- 簡單、快速的操作:如程式碼格式檢查、提交資訊驗證、簡單的測試腳本等。
- 基於事件的直接回應:如程式碼推送、合併請求、標籤建立等。
優點
- 即時性:在特定事件發生時立即執行。
- 靈活性:可以執行任何自訂腳本或觸發任何外部服務。
- 輕量級:適合快速的、本地化的操作。
Act Runner
Act Runner 則是用來執行複雜的 CI/CD 工作流程,特別適合以下情境:
- 複雜的建置與測試流程:如多步驟建置、依賴安裝、執行測試、產生建置工件等。
- 與版本控制系統整合:例如根據不同的分支、標籤、Pull Request 執行不同的工作流程。
- 可重複的工作流程:定義一次工作流程,能在不同環境中一致地執行。
優點
- 一致性:工作流程定義和執行的一致性,不受環境變化影響。
- 複雜性:適合處理複雜的 CI/CD 流程。
- 可擴充性:支援外掛程式、擴充功能和整合各種服務和工具。
適用場景
使用 Hook
- 簡單任務:如程式碼格式檢查、通知、簡單測試。
- 即時回應:需要立即對某個事件做出反應。
- 與外部系統互動:觸發外部 CI/CD 系統或通知服務。
使用 Act Runner
- 複雜工作流程:如多步驟的建置、測試和部署。
- 一致性需求:需要在不同環境中保持一致的工作流程執行。
- 高可擴充性:需要整合多種工具和服務,支援複雜的 CI/CD 流程。
範例:結合使用 Hook 和 Act Runner
- 使用 Hook 觸發 Act Runner:
- 在 Gitea 中設定一個 Webhook,觸發 URL 指向一個本機或遠端伺服器上的 Act Runner 端點。
- 當程式碼推送時,Webhook 觸發 Act Runner 執行定義的工作流程。
- 使用 Hook 處理簡單任務,Act Runner 執行複雜任務:
- 在 Gitea 中設定 Git Hook 進行程式碼格式檢查和簡單測試。
- 在工作流程中使用 Act Runner 執行複雜的建置和部署任務。
範例配置
Gitea Webhook 配置
- 登入 Gitea,導覽至倉庫設定頁面。
- 點選 “Webhooks”。
- 新增一個新的 Webhook,URL 指向 Act Runner 端點。
Act Runner 工作流程檔案(.github/workflows/main.yml
)
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build project
run: npm run build
透過這種組合使用方式,你可以利用 Hook 的即時性和 Act Runner 的複雜性處理不同的 CI/CD 需求,達到最佳效果。