Gitea 是一個用於程式碼託管的輕量級單體程式,它能與現有的經典應用整合,諸如程式碼分析工具 SonarQube、持續整合工具 Drone、Jenkins 以及用於工單管理的使用者端外掛(VSCode、Jenkins IDE)。 不久之後,Gitea 也將迎來自身整合的一體化 CI/CD 功能。
今天要介紹的是 Gitea 與 Jenkins CI/CD 的整合。
Jenkins 是一款開源的、提供友好操作介面的持續整合(CI)工具,在國內外都有眾多的使用者。Jenkins 具有以下優點:
因此 Jenkins 也被眾多的企業或者組織用來構建自己的 CI/CD 系統。
然而,Jenkins 本身並不具備原始碼管理的能力,對於一個完整的 CI/CD 系統來講,必須要從原始碼管理系統開始。所以,本文將介紹如何利用 Gitea 和 Jenkins 來構建一個完整的 CI/CD 系統。
Jenkins 支援從通用 Git 伺服器拉取程式碼,無需安裝額外的外掛即可配合 Gitea 使用。用於 Jenkins 的 Gitea 外掛作用在於將 Jenkins CI/CD 許可權直接賦予 Gitea 伺服器上被授權的組織或個人,使用者無需單獨為每一個倉庫設定 Jenkins 觸發器即可享受 CI/CD 功能。
當用戶在倉庫中建立 Jenkinsfile
時,Jenkins 能夠自動掃描到該倉庫並啟動 CI/CD 流水線。
本次整合實踐主要包含以下內容
如果您還沒有搭建以上環境,我們提供了一個 docker-compose.yml
模板幫助您快速啟動,模板內容附在本文最後。
在本範例中,我們為 Jenkins 單獨建立了一個名為 Jenkins 的 Gitea 使用者賬號,便於 Jenkins 使用令牌存取 Gitea 伺服器。
在本範例中,我們在 Gitea 伺服器建立了一個組織 GiteaTeam 用於存放專案原始碼。同時,將 Jenkins 賬號加入 GiteaTeam 的管理員使用者組,便於 Jenkins 直接存取當前專案的程式碼倉庫、API、Webhook。
在 conf/app.ini
中新增 ALLOWED_HOST_LIST = *
允許從外部伺服器觸發 Gitea webhook。
[webhook]
ALLOWED_HOST_LIST = *
在 Jenkins 依次開啟 系統管理 - 外掛管理,在 可選外掛 中搜尋並安裝 Gitea。
開啟 Manage Credentials 新增 Gitea 存取令牌,用於從 Gitea 拉取程式碼、通過 API 安裝 Webhook。
Gitea Plugin 安裝完成後,在 Jenkins 依次開啟 系統管理 - 系統設定,找到 Gitea Server 並填寫:
https://gitea.com
http://JENINS_URL/gitea-webhook/post
) 觸發 Jenkins CI。Organization Folder 任務支援從 Gitea 伺服器掃描並自動新增組織或使用者目錄下的所有程式碼倉庫。當程式碼倉庫中包含 Jenkinsfile
時會自動將該倉庫加入流水線佇列。在這種模式下,該組織下的程式碼倉庫無需單獨設定 Webhook 便可以自動與 Jenkins CI 整合。
開啟剛才建立的 Organization Folder。在 Projects - Repository Sources 中新增 Gitea Organization 並填寫:
稍後,Jenkins 就會開始掃描 Gitea 伺服器上的 GiteaTeam 組織,在 Scan Gitea Organization Log
呈現出掃描結果:
在上面的整合設定中,我們為 Gitea 伺服器上的 GiteaTeam 組織整合了 Jenkins CI 能力。於是,當用戶在 GiteaTeam 組織中建立包含 Jenkinsfile
的程式碼倉庫時, Jenkins CI 也將自動啟動,為 Gitea 設定 Webhook。當用戶再次提交程式碼到 Gitea 伺服器時,Jenkins 就能被 Gitea Webhook 觸發構建過程。
JenkinsExample 專案中僅包含一個有效的 Jenkinsfile
範例檔案,用於演示 Jenkins CI 與 Gitea 的整合。
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo build'
}
}
stage('Test'){
steps {
sh 'echo test'
}
}
stage('Deploy') {
steps {
sh 'echo publish'
}
}
}
}
當我們的組織與 Jenkins 整合之後,Gitea Plugin 外掛自動為新建的 Jenkins 專案建立 Webhook。(前提是在 Gitea Plugin 中勾選 Manage hook)
檢查 Gitea Plugin 自動為 Gitea 建立的 Webhook:
最新的 Docker Enginine 已經整合了 docker compose 命令,您可以使用 docker compose up -d 一鍵啟動 Gitea 和 Jenkins。
version: "3"
volumes:
jenkins_home:
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- 3000:3000
jenkins:
container_name: jenkins
image: jenkins/jenkins:lts-jdk11
restart: on-failure
privileged: true
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime:ro
ports:
- 8080:8080
- 50000:50000