首页 > 其他分享 >Gitee push自动触发Jenkins构建测试

Gitee push自动触发Jenkins构建测试

时间:2024-11-17 14:18:21浏览次数:1  
标签:src git Gitee libzmtp voter push Jenkins

Gitee push自动触发Jenkins测试

可以实现每次提交代码(git pull, Pull Request)后自动构建、测试(需要仓库管理者配置Gitee Webhook)。

1 配置方法

简单来说:

  1. 为一台服务器配置HTTP公网地址,实现内网穿透(如用花生壳做网页映射)
  2. 在目标服务器上,安装并配置Jenkins,并配置对应的Gitee以及Generic Webhook Trigger插件。
  3. 创建对应的Jenkins Item, 写自动化shell脚本。
  4. 在Gitee为目标仓库配置Webhook,指向目标服务器的Jenkins。
  5. 每次执行git push命令,就会触发Jenkins自动构建&测试,生成日志。也可手动或定时触发。

1.1 配置公网地址

通过FRP等方式实现。
Dashboard - Manage Jenkins - System - Jenkins Location,将Jenkins URL改为公网地址。

1.2 配置Jenkins

安装插件 :Dashboard - Manage Jenkins - System Configuration - Plugins - Available plugins,搜索Gitee和Generic Webhook Trigger并安装。

在Gitee中创建新令牌: Dashboard - Manage Jenkins - Credentials,添加Gitee APIV5 私人令牌。

创建Jenkins Item:

  • General
    • Gitee 链接 : Gitee
  • 源码管理 : Git
    • Repository URL : https://gitee.com/<仓库地址>.git
  • 构建触发器
    • 选中Gitee webhook 触发构建
      • Gitee WebHook 密码 : 点“生成”按钮生成一串密码
    • 选中Generic Webhook Trigger
      • Token: 输入token
  • Build Steps: 编写测试脚本,见下一节。

1.3 编写测试脚本

注:笔者要运行2个进程(./server和./client),其中./server需要持续运行直到./client运行结束,但实测由于未知原因,server启动后立即退出,创建的server进程号无法追踪到。下面的脚本使用了supervisor(事先已在机器上配置,见1.4节),保证server启动后持续运行。脚本示例:

#!/bin/bash

# Show current time, user & path
whoami
pwd

# Checkout and update repository
git checkout master
git pull
git submodule update --init

# Clean and build
make clean
make

# Set log file path
rm -f *.log
now=$(date +"%Y-%m-%d-%H:%M:%S")
echo $now
LOG_FILE="$now.log"

# Define client exec path
CLIENT_EXEC="./voter_client"

# 1. Run server
echo "Starting server..." | tee -a $LOG_FILE
sudo supervisorctl start como_fscp_voter
sleep 1

# 2. Run client
echo "Starting client..." | tee -a $LOG_FILE
$CLIENT_EXEC -t 127.0.0.1 7711 -d
sleep 1

# 3. Terminate server
echo "Terminating server..." | tee -a $LOG_FILE
sudo supervisorctl stop como_fscp_voter

# Read & print logs
echo "--------------------------------"
echo "$LOG_FILE content:"
cat "$LOG_FILE"

# Read & print syslog (if necessary)
# echo "Syslog content:"
# cat /var/log/syslog

1.4 supervisor配置

参考链接:Ubuntu 安装和使用 Supervisor(进程管理)

# 安装supervisor
sudo apt install supervisor
# 创建待运行应用的配置文件
sudo vim /etc/supervisor/conf.d/como_fscp_voter.conf

以笔者需构建的项目como-fscp-voter为例,写入下列配置,注意自定义directory, command(需为绝对路径)和stdout_logfile(该文件必须事先存在):

[program:voter]
directory=//var/lib/jenkins/workspace/gitee_task
command=/var/lib/jenkins/workspace/gitee_task/como_fscp_voter
autostart=true
autorestart=true
startretries=10
redirect_stderr=true
stdout_logfile=/var/lib/jenkins/workspace/gitee_task/voter.log
environment=ASPNETCORE_ENVIRONMENT="Development"

解释:当按照1.3节创建Jenkins任务(gitee_task)后,该路径(/var/lib/jenkins/workspace/gitee_task/)即所填Gitee仓库(como-fscp-voter)的根目录。

手动测试时,需要先创建.log文件:

sudo touch /var/lib/jenkins/workspace/gitee_task/voter.log

自动执行时,1.3节脚本(LOG_FILE="voter.log")已经在每次运行前保证了log文件存在。

运行supervisor,并可运行supervisorctl进行控制:

sudo supervisord

sudo supervisorctl # 进入supervisorctl环境
  reread           # 重新加载配置
  update           # 更新配置
  start all        # 开始所有配置
  status           # 查看状态
# 成功运行:
    como_fscp_voter   RUNNING   pid 2126469, uptime 0:01:04

在shell中可直接执行sudo supervisorctl start como_fscp_voter启动(而无需进入supervisorctl环境)。

1.5 在Gitee为目标仓库配置Webhook

打开Gitee目标仓库页面 - 管理 - (下滑找到)Webhooks - 添加WebHook:

URL: https://<公网IP[:端口]>/generic-webhook-trigger/invoke?token=<Generic Webhook trigger生成的token>>

Webbook密码:在Jenkins创建任务时生成的Webhook密码

选择事件:Push(默认), Pull Request(可选)

按更新按钮,若请求历史一栏显示Response值为200,说明配置成功。

2 测试

2.1 测试方法

正确配置后,可通过如下方式触发构建:

  1. Gitee触发。如git push(最常用)或Pull Request;
  2. Jenkins手动或定时触发。

Gitee有测试Webhook是否配置成功的模块,向Jenkins所在服务器发送HTTP请求,但据传有bug(参考链接)。我们可以编写一个发送HTTP请求的Python程序,按照链接改正Headers,以模拟Gitee的git push或Pull Request事件。示例如下:

import requests

# 定义URL
url = 'https://<Jenkins服务器的公网IP>/gitee-project/gitee_task'

# 设置headers
headers = {
    'X-Gitee-Token': '<Your Token>',
    'X-Gitee-Event': 'Push Hook',
    'User-Agent': 'git-oschina-hook',
    'X-Gitee-Timestamp': 'time',
    'X-Gitee-Ping': 'true',
    'Content-Type': 'application/json',
    'X-Git-Oschina-Event': 'Push Hook'
}

# 设置payload (具体在Gitee Webhook上查看)
payload = {...}

# 发送POST请求
response = requests.post(url, headers=headers, json=payload)

# 打印响应内容
print(f"Status Code: {response.status_code}")
print(f"Response Content: {response.text}")

若返回状态码200,表示配置成功:

Status Code: 200
Response Content: push_hooks ref = refs/heads/test_version commit sha = ad2f7b...f242a8 has been accepted.

2.2 输出示例

运行1.3节所述脚本,即可正常运行,某次测试的Jenkins控制台输出如下:

Started by user admin
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/gitee_task
The recommended git tool is: NONE
No credentials specified
 > git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/gitee_task/.git # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://gitee.com/tjopenlab/como-fscp-voter.git # timeout=10
Fetching upstream changes from https://gitee.com/tjopenlab/como-fscp-voter.git
 > git --version # timeout=10
 > git --version # 'git version 2.34.1'
 > git fetch --tags --force --progress -- https://gitee.com/tjopenlab/como-fscp-voter.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision f352e32...a11038e1a0b3d00 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f f352e32...a11038e1a0b3d00 # timeout=10
Commit message: "Add debugging options"
 > git rev-list --no-walk f352e32...a11038e1a0b3d00 # timeout=10
[gitee_task] $ /bin/bash /tmp/jenkins5491866742155348232.sh
jenkins
/var/lib/jenkins/workspace/gitee_task
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
已经是最新的。
rm -f como_fscp_voter
rm -f voter_client
rm -f voter_client_tcp_1
gcc -I./libzmtp/include -I./libcrc -I./inih -I./src -I./rudp src/como_fscp_voter.c src/config.c src/voter_server.c src/voterlib.c src/math_utils.c src/proc_utils.c src/voter_message.c libcrc/crc32.c inih/ini.c src/ZMQ_Switcher.c src/voter_logger.c rudp/rudp.c ./libzmtp/src/MemPool.c ./libzmtp/src/zmtp_channel.c ./libzmtp/src/zmtp_dealer.c ./libzmtp/src/zmtp_endpoint.c ./libzmtp/src/zmtp_ipc_endpoint.c ./libzmtp/src/zmtp_msg.c ./libzmtp/src/zmtp_tcp_endpoint.c -o como_fscp_voter -O0 -Wall -W -lpthread -g
gcc -I./libzmtp/include -I./libcrc -I./inih -I./src -I./rudp libcrc/crc32.c src/voter_message.c src/ZMQ_Switcher.c src/voterlib.c src/voter_logger.c clients/voter_client.c rudp/rudp.c ./libzmtp/src/MemPool.c ./libzmtp/src/zmtp_channel.c ./libzmtp/src/zmtp_dealer.c ./libzmtp/src/zmtp_endpoint.c ./libzmtp/src/zmtp_ipc_endpoint.c ./libzmtp/src/zmtp_msg.c ./libzmtp/src/zmtp_tcp_endpoint.c -o voter_client -O0 -Wall -W -lpthread -g
gcc -I./libzmtp/include -I./libcrc -I./inih -I./src -I./rudp libcrc/crc32.c src/voter_message.c src/ZMQ_Switcher.c src/voterlib.c src/voter_logger.c clients/voter_client_tcp_1.c rudp/rudp.c ./libzmtp/src/MemPool.c ./libzmtp/src/zmtp_channel.c ./libzmtp/src/zmtp_dealer.c ./libzmtp/src/zmtp_endpoint.c ./libzmtp/src/zmtp_ipc_endpoint.c ./libzmtp/src/zmtp_msg.c ./libzmtp/src/zmtp_tcp_endpoint.c -o voter_client_tcp_1 -O0 -Wall -W -lpthread -g
2024-11-15-09:17:55
Starting server...
como_fscp_voter: started
Starting client...
Terminating server...
como_fscp_voter: stopped
--------------------------------
2024-11-15-09:17:55.log content:
Starting server...
Starting client...
Terminating server...
Finished: SUCCESS

参考链接

Jenkins + Gitee 实现代码自动化构建 - 腾讯云
Jenkins - 一篇就能上手 Gitee代码自动化构建 - 阿里云
Generic Webhook Trigger - Jenkins.io

Gitee Webhook存在404问题,使用Generic Webhook(jenkins使用gitee插件自动部署webhook404问题记录 - CSDN)

标签:src,git,Gitee,libzmtp,voter,push,Jenkins
From: https://www.cnblogs.com/EndPoem-ZH/p/18550514

相关文章

  • 【学习心得】数据分析三剑客跟学Gitee仓库
        之前,自己在学习数据分析过程中的学习方法和思路,将那些摸索与实践中的心得体会分享出来,能够得到大家的喜欢、点赞我非常高兴,谢谢大家的支持!这些正面的反馈对我来说,不仅是莫大的鼓励,更是持续前进的动力源泉。然而,程序员有一句名言:Talkischeap,Showmethecode.......
  • jenkinsfile
    k8s集群中用的jenkinsfile部署java后台项目#x项目test-java-eladmin-ci//harbor镜像仓库地址和密码信息defregistry="harbor.solomon.com"//jenkins中定义的连接harbor的用户名密码凭据defregistry_se="d2318c77-8a32-4618-bced-d6cabb0454b4"//gitlab地......
  • vector<int>::push_back 与直接访问性能对比
    vector是提前开好空间然后每次clear,vector2是reserve,list就是list,array是对vectorvec[cur++]=i;。这里都是整数,push_back与emplace_back整体没有什么区别,但有人要看,所以函数名前面加了e的是emplace_back。测试结果:array<vector=vector2<<list2024-11-15T......
  • Python开发环境搭建(PyCharm+Anaconda+Git+Gitee)
    一、Anaconda介绍1.1为什么选择Anaconda?Anaconda是一个开源的Python发行版本,主要用于数据科学和机器学习,它包含了Python、conda以及众多工具和库,让我们可以轻松的构建和管理python虚拟环境,方便的进行python项目开发。下面是选择Anaconda的理由:安装简单方便便捷的Python虚拟......
  • Jenkins Job中衍生进程存活难题及解决方案
    JenkinsJob中衍生进程存活难题及解决方案场景介绍在Jenkins中创建了一个Job,假设你在一系列BuildStep之前或之后启动了一个进程,例如启动一个Jboss进程。在Build完成后,你查看ConsoleOutput,发现显示启动成功,甚至PID也显示了。然而,当你到后台检查时,发现这个进程实际上并不存在,并......
  • 【Jenkins】如何优化Jenkins的性能?
    优化Jenkins的性能可以从多个方面着手,包括但不限于硬件资源、Jenkins配置、插件管理和流水线设计。下面是一些具体的优化策略,以及如何实施这些策略的示例。1.升级硬件资源增加内存:Jenkins运行时需要足够的内存来处理构建任务。如果Jenkins频繁出现内存不足的情况,应该考虑......
  • jenkins打包报错Build step 'Execute shell' marked build as failure Finished: FA
    1、jenkins打包报错  处理方式1、在步骤“Executeshell”命令最上面添加(还是报错)#!/bin/bash2、设置全局配置,添加键和值(还是报错)键:LANG值:zh.CH.UTF-83、设置全局配置,添加键和值(还是报错)键:JAVA_TOOL_OPTIONS值:-Dfile.encoding=UTF-84、cat /usr/lib/systemd/sys......
  • jenkins环境搭建
    linux安装maven及环境配置一、maven下载地址,安装binaries版本https://dlcdn.apache.org/maven/maven-3/3.8.8/ 或者使用wget命令命令:wgethttps://https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-src.tar.gz 二、解压命令:tar-zxvf apache-m......
  • VS Code Jenkins Pipeline 开发的插件推荐
    VSCode有一些专门为JenkinsPipeline开发的插件,可以提供代码高亮、自动补全、语法检查等功能。以下是一些常用的插件:1.JenkinsPipelineLinterConnector功能:该插件允许你在VSCode中编写JenkinsPipeline并直接连接到Jenkins服务器进行语法检查。它会自动将Pipel......
  • 【Linux】Github 仓库克隆速度慢/无法克隆的一种解决方法,利用 Gitee 克隆 Github 仓库
    Github经常由于DNS域名污染以及其他因素克隆不顺利。一种办法是修改hostssudogedit/etc/hosts加上一行XXX.XXX.XXX.XXXgithub.comXXX位置的IP可以通过网站查询IP/服务器github.com的信息-站长工具这种方法比较适合本身可以克隆,但是速度很慢的情况,可以提......