9

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

 2 years ago
source link: https://www.cnblogs.com/Gitea/p/jenkins.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 流水线。

插件详情:https://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 服务器。

411e17af84a13d07708fdcec981f9c6b.png

为 Jenkins 授予 Gitea 项目的访问权限

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

316329f11254e14d7076b6b7380b1bb5.png

修改 Gitea 服务器的 Webhook 设置

conf/app.ini 中添加 ALLOWED_HOST_LIST = * 允许从外部服务器触发 Gitea webhook。

[webhook]
ALLOWED_HOST_LIST = *

安装 Gitea Plugin

在 Jenkins 依次打开 系统管理 - 插件管理,在 可选插件 中搜索并安装 Gitea

6079ba3f2a28285702f090a344891707.jpeg

在 Jenkins 中添加 Gitea 访问令牌

打开 Manage Credentials 添加 Gitea 访问令牌,用于从 Gitea 拉取代码、通过 API 安装 Webhook。

  • Kind: 选择 Gitea Personal Access Token
  • Scope: 选择 Global
  • Token: 填写从 Gitea 申请的访问令牌
53615918ee8afb1c9cafc7577f8f3dbd.png

在 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。
c41533217d1d23b9c62d57b5451607b4.png

在 Jenkins 中创建 Organization Folder

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

1666a4e21da12414b968846d22f6dc84.png

配置 Repository Sources

打开刚才创建的 Organization Folder。在 Projects - Repository Sources 中添加 Gitea Organization 并填写:

  • Server: 选择一个 Gitea Server
  • Owner: 与 Jenkins 集成的 Gitea 组织或个人目录
  • Credentials: 选择一个用于访问 Gitea 的 Jenkins 账号访问令牌(应该拥有 Owner 的管理权限)
220831b32b7c7b81f49f182ec5d6b13e.png

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

c7087d8890eda1e6f7641da846676a46.png

集成演示 JenkinsExample

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

创建 JenkinsExample 项目

a5f22df840cff017dbde5e35d13c0dde.png

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:

b73f319180a4b09f00e04e89f1a77bc5.png

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

  1. 在 Gitea 的提交列表中,我们可以观察到当前代码提交的构建情况,黄色的 ● 表示正在进行构建任务,绿色的 ✔ 表示已经完成的构建任务。
5925e7f4fa92966946e24731f0e657d1.png
  1. 点击上面的 ●、✔、× 符号可以进入 Jenkins Pipeline 查看任务详情情况。
cfb6ef8334fba3f1f113d03fe1f52025.png

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

Recommend

  • 123
    • 掘金 juejin.im 7 years ago
    • Cache

    打造你专属的ubuntu系统

    前言:作为一名程序员重装系统是在所难免的,每次重装系统后都要安装一些必要的软件及进行一系列的环境配置,Windows倒还好,Linux上软件的安装及环境的配置都需要查找资料获取相应的命令,为了以后重装系统后不到处查找资料,就把一些常用的软件的安装命令及系统...

  • 44

    sonar架构图Requirements具体需求Youcansetthemdynamicallyforthecurrentsessionbyrunningthefollowingcommandsasroot:我偷懒,将下面内容添加到了/etc/bashrcsysctl-wvm.max_map_count=262144sysctl-wfs.file-max=65536ulimit-n65536uli

  • 90
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    持续集成工具Jenkins看这篇就够啦!

  • 43

  • 34
    • dockone.io 5 years ago
    • Cache

    Jenkins CI/CD 集成 Git Secrets

    通常,对我们在代码中使用的机密或凭据进行加密,然后将其保存在安全的地方。我们可以有很多选择来实现这一目标,例如使用 Vault 和 Git-crypt 等工具来。git-secret 是一个简单的工具,我们可以使用它在 Git 仓库中存储密钥。Git-secret...

  • 6

    使用Gitea+Drone打造自己的CI/CD系统 有些代码我放本地了,因此搭建了一个Gitea,再加上家里有个老机器,闲着也是闲着,就搭建一个Drone CI来跑测试。 首先可以直接安装: $ sudo pacman -S gitea 配置好...

  • 5

    Gitea: "#Gitea is joining the fediverse 🎉 We can now anno…" Follow #Gitea is joining the fediverse

  • 7

    关于代码托管,公司是基于Gitlab自建的,它功能全而强大,但是也比较重,我个人偏向于开源、小巧、轻便、实用,所以就排除了Github,在Gogs和Gitea中选者。Gogs在Github有38k+Star,Gitea在Github要偏少一些,只有27k+Star,但是Gitea更新更快,功能更多,Gogs...

  • 6

    Gitea 支持在 Windows 系统上安装和使用。Gitea 本身作为一个单体应用程序,即点即用,如需长期驻留作为后台服务并开机运行就要依靠 Windows 服务工具

  • 3

    vivo 自研Jenkins资源调度系统设计与实践 作者:Wu Qinghua 2023-02-09 08:08:01 服务器 本文从目前业界实现Jenkins的高可用的实现方案,分...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK