體驗 Gitea Actions

2022-12-16 21:02:27

即將推出的 Gitea Actions 致力於打造一個 CI/CD 工具的標準協定,第三方 CI 系統可以基於actions 協定與 Gitea 平臺整合,提供一站式管理方案。Gitea Actions 為此走出了第一步。

回顧 GitHub Actions

GitHub Actions 是一種持續整合和持續交付 (CI/CD) 平臺,可用於自動執行任務、測試和部署。使用者可以建立工作流程來構建和測試儲存庫的每個拉取請求,或將合併的拉取請求部署到生產環境。

GitHub Actions 不僅僅是 DevOps,還允許使用者在儲存庫中發生其他事件時執行工作流程。 例如,可以執行工作流程,以便在有人建立新問題時自動新增相應的標籤。

GitHub 提供 Linux、Windows 和 macOS 虛擬機器器來執行工作流程,或者在自有的資料中心或雲基礎架構中託管執行器。

Gitea 的 DevOps 生態

得益於廣大開源社群的支援,目前 Gitea 可以良好適配以下 DevOps 工具。

  • Agola
  • AppVeyor
  • AWS Cloud Integration(webhook-to-s3)
  • buildbot-gitea
  • buildkite-connector
  • Concourse
  • Dex
  • Drone
  • Ghorg
  • gickup
  • Jenkins
  • 建木 CI
  • Metroline
  • Monitoring mixin
  • mvoCI
  • Renovate
  • Tea Runner
  • Woodpecker

經過長期的社群互動,我們獲得了大量第三方CI系統的整合方案。但我們始終發現,獨立搭建並運維一整套CI系統只是一小部分極客的專長,對於更廣泛的使用者而言這並不是個簡單的工作,於是我們開始嘗試為此努力,讓工具更好地為人服務。

打造 Gitea Actions

不可否認 GitHub Actions 打造了一套很棒的工作環境,它的設計理念使倉庫與 CI 工具之間有了更加緊密的整合,實現了程式碼即設定,同時平臺使用者為整套系統提供了豐富的應用擴充套件,相比傳統模式來說,易用性上更勝一籌。如果能將它的優點移植到 Gitea 將是件很棒的事情。

好訊息是,經過兩年的調研與討論,我們終於將 Gitea 內建CI/CD系統的開發任務提上了日程。(#13539

開發進展

https://github.com/go-gitea/gitea/issues/13539

Gitea Actions 實現了一個內建的 CI/CD 系統框架,相容 GitHub Actions 的 YAML 工作流編排格式,相容 GitHub Marketplace 中大部分現有的 Actions 外掛。

系統由三部分組成:

  • Gitea Actions 協定的定義Golang實現
  • Actions Runner: 基於 nektos/act 實現的任務子系統
  • 在 Gitea 主程式上實現 Runner 任務管理和排程模組

執行截圖

1.系統管理員可以存取 Runners 管理介面,建立、編輯和刪除 Runner。

2.通過倉庫頂部的導航開啟 Actions,檢視 CI 構建資訊。

3.點選某個 CI 構建結果,檢視紀錄檔。

嚐鮮體驗

⚠ 實驗性功能,請勿用於生產環境

準備環境

  • 記憶體:至少 4GB,用於編譯 Gitea
  • Docker:可執行 docker 命令,用於拉取和執行容器

搭建

1.編譯執行 Gitea

下載帶有 Actions 模組的 Gitea 原始碼:

# 目前可以從 @wolfogre 的開發分支克隆帶有 Actions 模組的原始碼到本地編譯。
git clone https://github.com/wolfogre/gitea.git --branch=feature/bots
cd gitea

編譯方法可以參考從原始碼安裝。這裡我們需要準備開發環境 Node.js LTS (nvm instal --lts) 和 Golang。

以下是推薦的打包方法(帶有SQLite,方便本地測試)

TAGS="bindata sqlite sqlite_unlock_notify" make build

啟動 Gitea 主程式。這裡先走完初始化步驟,會生成一個組態檔,位於當前目錄下的

./custom/conf/app.ini

編輯上述組態檔,開啟 Actions 功能。

[actions]
ENABLED = true

重新啟動程式:./gitea web

2.啟動 Runner

首先編譯 act_runner 程式

git clone https://gitea.com/gitea/act_runner.git
cd act_runner
make build

然後將 Runner 註冊到 Gitea 伺服器。

  • 方法一:使用互動命令設定
$ ./act_runner register

INFO Registering runner, arch=amd64, os=linux, version=0.1.5.
WARN Runner in user-mode.
INFO Enter the Gitea instance URL (for example, https://gitea.com/): [輸入伺服器地址]
INFO Enter the runner token: [輸入 Runner 令牌]
INFO Enter the runner name (if set empty, use hostname:ubuntu ): [輸入 Runner 名稱]
INFO Enter the runner labels, leave blank to use the default labels (comma-separated, for example, ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster): [輸入 Runner 標籤]

...
DEBU Successfully pinged the Gitea instance server
INFO Runner registered successfully.
  • 方法二:非互動式命令
    • --no-interactive
    • --instance 填寫伺服器地址
    • --token 填寫管理員從伺服器獲取的 Actions 令牌(/admin/runners
./act_runner register --instance http://<your_gitea_instance> --token <my_runner_token> --no-interactive

啟動程式

./act_runner daemon

3.為倉庫啟用 Actions 功能

您可以新建一個倉庫並手動開啟倉庫設定中的 Actions 功能。

重新整理頁面後,我們可以發現倉庫的頂部功能導航欄中多了一個 Actions 功能,點選 Actions 進入可以看到目前為空的 All Workflows 任務列表。

4.上傳 Workflows 設定到倉庫目錄 .gitea/workflows/build.yaml。由於 Gitea Actions 相容 GitHub Actions,因此您可以從 GitHub 檔案中複製範例。開始學習使用 Gitea Actions 吧!