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
手机扫一扫
移动阅读更方便
你可能感兴趣的文章