前言

Gitea 是一个用于代码托管的轻量级单体程序,它能与现有的经典运用集成,诸如代码剖析东西 SonarQube、继续集成东西 Drone、Jenkins 以及用于工单办理的客户端插件(VSCode、Jenkins IDE)。 不久之后,Gitea 也会兼容 GitHub Actions 使得 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 流水线。

插件概况:plugins.jenkins.io/gitea/

流程概览

本次集成实践首要包括以下内容

  • Gitea Plugin 插件的介绍和装备
  • Gitea + Jenkins 的 CI/CD 环境建立
  • 运用 Gitea 的 Webhook 功用,从 Gitea 侧触发 Jenkins Pipeline

Gitea

  1. 在 Gitea 注册用户 Jenkins,同时为用户 Jenkins 增加 API Access Token,用于 Jenkins 从 Gitea 拉取代码
  2. 在 Gitea 中创立安排 GiteaTeam,并且将 Jenkins 用户增加为安排办理员
  3. 在 GiteaTeam 安排中创立代码库房 JenkinsExample
  4. 修正 Gitea 服务器的 Webhook 设置

Jenkins

  1. 登录 Jenkins 办理面板,装置插件:Gitea
  2. 翻开 Manage Credentials 增加 Gitea 拜访令牌,用于从 Gitea 拉取代码、经过 API 装置 Webhook
  3. 翻开 Configure System 装备 Gitea Server 插件,填写 Gitea 服务器地址和 Mange Hooks 令牌(选用上一步填写的 Credentials)
  4. 集成演示 JenkinsExample

Gitea + Jenkins 的 Docker Compose 装备示例

如果您还没有建立以上环境,咱们供给了一个 docker-compose.yml 模板帮助您快速发动,模板内容附在本文最终。

Gitea 与 Jenkins 的集成实践

生成 Gitea 拜访令牌

在本示例中,咱们为 Jenkins 独自创立了一个名为 Jenkins 的 Gitea 用户账号,便于 Jenkins 运用令牌拜访 Gitea 服务器。

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

为 Jenkins 颁发 Gitea 项意图拜访权限

在本示例中,咱们在 Gitea 服务器创立了一个安排 GiteaTeam 用于存放项目源代码。同时,将 Jenkins 账号加入 GiteaTeam 的办理员用户组,便于 Jenkins 直接拜访当时项意图代码库房、API、Webhook。

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

修正 Gitea 服务器的 Webhook 白名单

出于安全考虑,您经过 Gitea Webhook 触发外部服务器的呼应前需求设定 webhook.ALLOWED_HOST_LIST 白名单来操控 Webhook 的意图地址。具体信息参阅文档 Webhook。

修正装备时,翻开 conf/app.ini,增加 ALLOWED_HOST_LIST = *[webhook] 栏目中,并重启 Gitea 服务器。例如:

[webhook]
ALLOWED_HOST_LIST = *

装置 Gitea Plugin

在 Jenkins 顺次翻开 体系办理插件办理,在 可选插件 中查找并装置 Gitea

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

在 Jenkins 中增加 Gitea 拜访令牌

翻开 Manage Credentials 增加 Gitea 拜访令牌,用于从 Gitea 拉取代码、经过 API 装置 Webhook。

  • Kind: 挑选 Gitea Personal Access Token
  • Scope: 挑选 Global
  • Token: 填写从 Gitea 申请的拜访令牌

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

在 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。

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

在 Jenkins 中创立 Organization Folder

Organization Folder 使命支持从 Gitea 服务器扫描并主动增加安排或用户目录下的所有代码库房。当代码库房中包括 Jenkinsfile 时会主动将该库房加入流水线队列。在这种模式下,该安排下的代码库房无需独自装备 Webhook 便能够主动与 Jenkins CI 集成。

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

装备 Repository Sources

翻开方才创立的 Organization Folder。在 Projects – Repository Sources 中增加 Gitea Organization 并填写:

  • Server: 挑选一个 Gitea Server
  • Owner: 与 Jenkins 集成的 Gitea 安排或个人目录
  • Credentials: 挑选一个用于拜访 Gitea 的 Jenkins 账号拜访令牌(应该拥有 Owner 的办理权限)

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

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

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

集成演示 JenkinsExample

在上面的集成装备中,咱们为 Gitea 服务器上的 GiteaTeam 安排集成了 Jenkins CI 才能。所以,当用户在 GiteaTeam 安排中创立包括 Jenkinsfile 的代码库房时, Jenkins CI 也将主动发动,为 Gitea 装备 Webhook。当用户再次提交代码到 Gitea 服务器时,Jenkins 就能被 Gitea Webhook 触发构建过程。

创立 JenkinsExample 项目

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

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:

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

提交代码更改并查看 Jenkins CI 流程

  1. 在 Gitea 的提交列表中,咱们能够观察到当时代码提交的构建状况,黄色的 ● 表明正在进行构建使命,绿色的 ✔ 表明现已完结的构建使命。

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

  1. 点击上面的 ●、✔、 符号能够进入 Jenkins Pipeline 查看使命概况状况。

Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

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