Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统
前言
Gitea 是一个用于代码托管的轻量级单体程序,它能与现有的经典应用集成,诸如代码分析工具 SonarQube、持续集成工具 Drone、Jenkins 以及用于工单管理的客户端插件(VSCode、Jenkins IDE)。 不久之后,Gitea 也将迎来自身集成的一体化 CI/CD 功能。
今天要介绍的是 Gitea 与 Jenkins CI/CD 的集成。
关于 Jenkins
Jenkins 是一款开源的、提供友好操作界面的持续集成(CI)工具,在国内外都有众多的使用者。Jenkins 具有以下优点:
- 界面友好
- 插件丰富
- 可编程的 API
- 历史悠久、社区活跃
因此 Jenkins 也被众多的企业或者组织用来构建自己的 CI/CD 系统。
然而,Jenkins 本身并不具备源代码管理的能力,对于一个完整的 CI/CD 系统来讲,必须要从源代码管理系统开始。所以,本文将介绍如何利用 Gitea 和 Jenkins 来构建一个完整的 CI/CD 系统。
关于 Jenkins 的 Gitea 插件
Jenkins 支持从通用 Git 服务器拉取代码,无需安装额外的插件即可配合 Gitea 使用。用于 Jenkins 的 Gitea 插件作用在于将 Jenkins CI/CD 权限直接赋予 Gitea 服务器上被授权的组织或个人,用户无需单独为每一个仓库配置 Jenkins 触发器即可享受 CI/CD 功能。
当用户在仓库中创建 Jenkinsfile 时,Jenkins 能够自动扫描到该仓库并启动 CI/CD 流水线。
流程概览
本次集成实践主要包含以下内容
- Gitea Plugin 插件的介绍和配置
- Gitea + Jenkins 的 CI/CD 环境搭建
- 利用 Gitea 的 Webhook 功能,从 Gitea 侧触发 Jenkins Pipeline
Gitea
- 在 Gitea 注册用户 Jenkins,同时为用户 Jenkins 添加 API Access Token,用于 Jenkins 从 Gitea 拉取代码
- 在 Gitea 中创建组织 GiteaTeam,并且将 Jenkins 用户添加为组织管理员
- 在 GiteaTeam 组织中创建代码仓库 JenkinsExample
- 修改 Gitea 服务器的 Webhook 设置
Jenkins
- 登录 Jenkins 管理面板,安装插件:Gitea
- 打开 Manage Credentials 添加 Gitea 访问令牌,用于从 Gitea 拉取代码、通过 API 安装 Webhook
- 打开 Configure System 配置 Gitea Server 插件,填写 Gitea 服务器地址和 Mange Hooks 令牌(选用上一步填写的 Credentials)
- 集成演示 JenkinsExample
Gitea + Jenkins 的 Docker Compose 配置示例
如果您还没有搭建以上环境,我们提供了一个 docker-compose.yml 模板帮助您快速启动,模板内容附在本文最后。
Gitea 与 Jenkins 的集成实践
生成 Gitea 访问令牌
在本示例中,我们为 Jenkins 单独创建了一个名为 Jenkins 的 Gitea 用户账号,便于 Jenkins 使用令牌访问 Gitea 服务器。

为 Jenkins 授予 Gitea 项目的访问权限
在本示例中,我们在 Gitea 服务器创建了一个组织 GiteaTeam 用于存放项目源代码。同时,将 Jenkins 账号加入 GiteaTeam 的管理员用户组,便于 Jenkins 直接访问当前项目的代码仓库、API、Webhook。

修改 Gitea 服务器的 Webhook 设置
在 conf/app.ini 中添加 ALLOWED_HOST_LIST = * 允许从外部服务器触发 Gitea webhook。
[webhook]
ALLOWED_HOST_LIST = *
安装 Gitea Plugin
在 Jenkins 依次打开 系统管理 - 插件管理,在 可选插件 中搜索并安装 Gitea。

在 Jenkins 中添加 Gitea 访问令牌
打开 Manage Credentials 添加 Gitea 访问令牌,用于从 Gitea 拉取代码、通过 API 安装 Webhook。
- Kind: 选择 Gitea Personal Access Token
- Scope: 选择 Global
- Token: 填写从 Gitea 申请的访问令牌

在 Jenkins 中配置 Gitea Server
Gitea Plugin 安装完成后,在 Jenkins 依次打开 系统管理 - 系统配置,找到 Gitea Server 并填写:
- Name: 任意填写一个名称
- Server URL: 填写 Gitea 服务器的 HTTP 地址,如
https://gitea.com - 勾选 Manage hooks 并选择访问令牌。这将允许 Jenkins 使用您选择的 Gitea 帐户自动配置 Gitea Webhook,当代码提交到 Gitea 时,Gitea 通过 Webhook (
http://JENINS_URL/gitea-webhook/post) 触发 Jenkins CI。

在 Jenkins 中创建 Organization Folder
Organization Folder 任务支持从 Gitea 服务器扫描并自动添加组织或用户目录下的所有代码仓库。当代码仓库中包含 Jenkinsfile 时会自动将该仓库加入流水线队列。在这种模式下,该组织下的代码仓库无需单独配置 Webhook 便可以自动与 Jenkins CI 集成。

配置 Repository Sources
打开刚才创建的 Organization Folder。在 Projects - Repository Sources 中添加 Gitea Organization 并填写:
- Server: 选择一个 Gitea Server
- Owner: 与 Jenkins 集成的 Gitea 组织或个人目录
- Credentials: 选择一个用于访问 Gitea 的 Jenkins 账号访问令牌(应该拥有 Owner 的管理权限)

稍后,Jenkins 就会开始扫描 Gitea 服务器上的 GiteaTeam 组织,在 Scan Gitea Organization Log 呈现出扫描结果:

集成演示 JenkinsExample
在上面的集成配置中,我们为 Gitea 服务器上的 GiteaTeam 组织集成了 Jenkins CI 能力。于是,当用户在 GiteaTeam 组织中创建包含 Jenkinsfile 的代码仓库时, Jenkins CI 也将自动启动,为 Gitea 配置 Webhook。当用户再次提交代码到 Gitea 服务器时,Jenkins 就能被 Gitea Webhook 触发构建过程。
创建 JenkinsExample 项目

Jenkinsfile 示例
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'
}
}
}
}
检查 Gitea Plugin 创建的 Webhook
当我们的组织与 Jenkins 集成之后,Gitea Plugin 插件自动为新建的 Jenkins 项目创建 Webhook。(前提是在 Gitea Plugin 中勾选 Manage hook)
检查 Gitea Plugin 自动为 Gitea 创建的 Webhook:

提交代码更改并查看 Jenkins CI 流程
- 在 Gitea 的提交列表中,我们可以观察到当前代码提交的构建情况,黄色的 ● 表示正在进行构建任务,绿色的 表示已经完成的构建任务。

- 点击上面的 ●、、× 符号可以进入 Jenkins Pipeline 查看任务详情情况。

Gitea + Jenkins 的 Docker Compose 配置示例
最新的 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
Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统的更多相关文章
- Gitea 与 Drone 集成实践:完全基于 Docker 搭建的轻量级 CI/CD 系统
Drone 是一个使用 Go 语言编写的自助式的持续集成平台,和 Gitea 一样可以完全基于容器部署,轻松扩展流水线规模.开发者只需要将持续集成过程通过简单的 YAML 语法写入 Gitea 仓库目 ...
- 基于 Kubernetes 实践弹性的 CI/CD 系统
大家好,我是来自阿里云容器服务团队的华相.首先简单解释一下何为 Kubernetes 来帮助大家理解.Kuberentes 是一个生产可用的容器编排系统.Kuberentes 一方面在集群中把所有 N ...
- Jenkins持续集成实践之java项目自动化部署
关于Linux安装Jenkins可以参考我的这篇博文Ubuntu16.04环境安装jenkins 1.安装部署插件 进入插件管理,并搜索该插件Deploy to container Plugin进行安 ...
- docker + gitlab + jenkins 搭建 CI/CD 系统
gitlab+jenkins+docker 计算机网络大全
- 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点
1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...
- 从零入门 Serverless | 企业级 CI/CD 工具部署 Serverless 应用的落地实践
背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解.SAE 为客户免除了很多复杂的运维工作,开箱即用.按用量付费:与此同时 SAE 提供了丰富的 Open API,可以很容 ...
- Jenkins CI&CD 自动化发布项目实战(上篇)
Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)
本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...
随机推荐
- .NET ORM框架HiSql实战-第一章-集成HiSql
一.引言 做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等.在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架. 不过最近园子关于.NET ...
- 机器学习-K近邻(KNN)算法详解
一.KNN算法描述 KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表.KNN算法属于有监督学习方式的分类算法,所谓K近 ...
- 关于 用fscanf读文件,把文件中用##分割的内容分开
今天呀,被学弟问了一个问题 文件里存的是"123##456##0##1644444.....##" 为什么用fscanf(fp, "%s##%s......", ...
- 解决linuxdeployqt报错——系统版本过新的问题
参考文章:https://icode.best/i/45016240865860 目前测试有效 大概你会跳转到这个议题 issues#340 显示这样类似的报错 linuxdeployqt 5 (co ...
- 千万小心,99%的Java程序员会踩这些坑
前言 作为Java程序员的你,不知道有没有踩过一些基础知识的坑. 有时候,某个bug查了半天,最后发现竟然是一个低级错误. 有时候,某些代码,这一批数据功能正常,但换了一批数据就出现异常了. 有时候, ...
- 优雅哥学 Webpack - 01 - Webpack 5 快速体验
程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构 本文摘要:主要讲解 webpack 5 初体验.从webpack 5 初识到便写代码.优雅哥将 ...
- Java通过反射注解赋值
前段时间,领导分配一个统计销售区域汇总的数据,解决方案使用到了反射获取注解,通过注解获取属性或者设置字段属性. 问题描述 查询公司列表,分别是公司id.区域id.区域名称: 公司id 区域id 区域名 ...
- NOI / 2.1基本算法之枚举 1749:数字方格
描述: 如上图,有3个方格,每个方格里面都有一个整数a1,a2,a3.已知0 <= a1, a2, a3 <= n,而且a1 + a2是2的倍数,a2 + a3是3的倍数, a1 + a2 ...
- 类型转换_str()函数与int()函数
数据类型转换 需要将不同数据类型拼接在一起的时候就需要先进行数据类型转换 str+str//这里的+叫做连接字符,有点类似C++中的操作符重载,老对象里面的内容了 在python中整型和字符串类型不能 ...
- 4G巴歇尔槽流量采集网关
首先向大家展示下拓扑图: 金鸽科技R10物联网网关,带有一个RS485口可以采集巴歇尔槽的液位状态,还提供一个网口用于给摄像头和现场其他的网络设备提供网络传输通道!R10A内置了巴歇尔槽液位换算成流量 ...