Jenkins – CI 設定 with Gitea

Jenkins 結合 C# Gitea .net core 專案 CICD 環境建置教學

  1. Gitea 安裝 (link)
  2. Jenkins  安裝 (link)

🔧 建立 Multibranch Pipeline Job

  1. 在 Jenkins 建立新 Job → 選 Multibranch Pipeline
  2. 在設定裡:
    • Branch Sources → 選 Git → 填入 Gitea 專案網址,例如:
      • http://localhost:4000/rororo/Test.git
    • 設定認證(Gitea 帳號/Token)
    • Build Triggers → 勾選 Scan Multibranch Pipeline Triggers(可定時掃描 repo)
    • 或者靠 Gitea Webhook 直接觸發(推薦)
  3. Jenkins 會自動掃描 repo → 找到有 Jenkinsfile 的分支 → 自動建立對應的 Pipeline Job。

Gitea 內部原始碼路徑

Gitea 帳號/Token 取得

  1. 登入你的 Gitea 帳號
  2. 點右上角頭像 → Settings
  3. 左側選單 → ApplicationsGenerate New Token
    • 隨便取個名字,例如 rororo-ci
    • Scope 勾選:
      • repo(完整存取 repo)
    • 產生後會得到一組 Token(類似一長串亂碼)
      • 9a88cd9fa2431cd1c3f4b5b23b9c2107b7911f9f
    • ⚠️ 這組 Token 只會顯示一次,請先複製保存。

成功取得 token

Jenkins 設定認證

  • RororoTest → 只在 RororoTest 這個 Job/資料夾底下能用
  • Jenkins (Global) → 全部 Jenkins Job 都能用

✅ 建議選 Jenkins (Global),因為 Token 可能會被多個 Pipeline 或 Job 用到(例如同一個 Gitea 帳號管理多個專案)。

  1. Add → Jenkins
  2. Type 選 Secret text
  3. 把剛剛在 Gitea 產生的 Access Token 貼上去
  4. ID 可以填 gitea-token(方便在 Pipeline 裡引用)

在 Credentials 會看到

存檔後由於 Gitea 與 Jenkins 是用 docker 架的發生了 connect 問題

解法(容器間穩定連線)

建立一個 docker 的內部連線網路

docker network create cicd_net
  • 把 Gitea 與 Jenkins 都加入這個 network:
docker network connect cicd_net gitea
docker network connect cicd_net jenkins
  • 修改 Git路徑
  • 改 內部端口 port號 3000

成功執行

安裝 Gitea 套件

右上角齒輪 > Manage Plugins > Available 搜尋 Gitea,打勾後選擇安裝

進行安裝


在 Gitea 撰寫 CICD 腳本 for Jenkins

repo 結構是這樣

Test/                (repo root)
 ├─ README.md
 ├─ MVC_Web/         (資料夾)
 │   ├─ MVC_Web.sln  (solution file)
 │   ├─ MVC_Web/     (專案)
 │   ├─ packages/
 │   └─ .vs/
Jenkinsfile(Multibranch Pipeline)
pipeline {
    agent any   // 指定任何可用節點

    stages {
        stage('Restore') {
            steps {
                dir('MVC_Web') {
                    sh 'dotnet restore MVC_Web.sln'
                }
            }
        }

        stage('Build') {
            steps {
                dir('MVC_Web') {
                    sh 'dotnet build MVC_Web.sln --configuration Release'
                }
            }
        }

        stage('Test') {
            steps {
                dir('MVC_Web') {
                    sh 'dotnet test MVC_Web.sln --no-build --verbosity normal'
                }
            }
        }

        stage('Publish') {
            steps {
                dir('MVC_Web') {
                    sh 'dotnet publish MVC_Web.sln -c Release -o out'
                }
            }
        }
    }
}

新增到 Gitea 上面
執行發現 Jenkins docker 套件未安裝

安裝一下 docker 套件

還是出錯看來要裝其他的 docker套件
需安裝 Docker Pipeline 插件

棄用 : 因為需要 Docker Jenkin中還要裝 docker 套件

改用 在容器裡直接安裝 .NET SDK(簡單但不乾淨)

先進入 Jenkins 容器 (root 身分) :
docker exec -u root -it jenkins bash
裝 .NET SDK(以 .NET 8 為例,Ubuntu-based):
apt-get update
apt-get install -y wget apt-transport-https
wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
apt-get update
apt-get install -y dotnet-sdk-8.0
確認是否安裝成功
dotnet --version

CI 成功

但這個是 手動執行的 並非用 Gitea 進行觸發的

Gitea Webhook 設定

前置必備
  1. Jenkins 已安裝 Gitea 插件
  2. Jenkins 伺服器可被 Gitea 訪問
  3. 擁有 Gitea 倉庫的管理員權限

進入 Gitea → 你的 repo → Settings → Webhooks → Add Webhook → Gitea

Target URL 填 :

http://jenkins:8080/gitea-webhook/post

嘗試 Push 發生錯誤

意思是:Gitea 自己有安全限制,預設 webhook 只能呼叫允許的 host。
你的 http://jenkins:8080/... 這個目標目前不在允許清單裡,所以被 Gitea 擋掉了。

Delivery: Post "http://jenkins:8080/gitea-webhook/post": dial tcp 172.22.0.3:8080: 
webhook can only call allowed HTTP servers (check your webhook.ALLOWED_HOST_LIST setting), 
deny 'jenkins(172.22.0.3:8080)'

需到 docker container 的 Gitea app.ini 配置檔案開通網路權限

先進入 Gitea 容器 (root 身分) :

docker exec -u root -it gitea bash

找到 /data/gitea/conf/app.ini 修改裡面網路配置

[webhook]
; 允許的 host,可以用逗號分隔
ALLOWED_HOST_LIST = jenkins:8080,172.22.0.3:8080,localhost:8080

編輯內容,按 insert 鍵進行修改 最後 :wq Enter 修改完畢。

vi app.ini

確認是否修改完畢

cat app.ini

重啟 gitea 並且 Push 文件測試

還是沒有觸發,原來是我 Jenkins 設定 Git 而非 Gitea 導致的錯誤

更改 Gitea Server 不給填寫需要選擇,看來不是在這邊設定,有額外的地方

需到 System 設定全域變數

Branch Source 就可以成功指定

成功掃描到

可以看到很多歷史紀錄 透過 Gitea plugin

設定定期 auto build,這個會去偵測 你的 sourcecode 是否有新的 Checkin 版本如果有就會 autoBuild 沒有就忽略,也意味著會去監控原始碼的 Source code。

webhook 還是不能成功執行,原來是要安裝套件 Multibranch Scan Webhook Trigger

安裝 完畢可以在建立的專案中找到勾選 webhook 選項