> 技术文档 > 使用jenkins+gitee提交代码时自动构建_jenkins自动构建

使用jenkins+gitee提交代码时自动构建_jenkins自动构建


文章目录

  • 前言
  • 一、jenkins配置
  • 二、测试自动构建
  • 四、拓展--如何控制单任务构建
  • 四、总结

前言

最近在搞CI/CD自动化构建部署的流程工具,主要工具是jenkins+gitee,即代码库是在gitee,希望实现的功能是当我们提交代码时能自动的去构建任务。笔者之前也搭建过CI/CD,使用的是gitLab+jenkins,不过当时实现的并不是真正的CI/CD,只是省去了打包代码,上传服务器,执行启动命令的这些工作,即使这样也都极大的省去了每次升级迭代的重复打包部署工作,jenkins的部署使用以及和gitee、gitLab等公私不同的代码库的交互配置是比较复杂的,但是部署好,用起来是真的方便,建议大家有空还是要学习研究下。

本篇文章要介绍的是,当我们提交完代码后不需要去jenkins上手动点击构建任务,而是自动触发构建部署,而且是根据我提交代码到仓库时的commit message中的关键字信息来判断决定是否触发自动构建部署到服务器上,比如我的关键字是build,当我提交时的信息说明中包含build完整单词时,才会触发自动构建,否则不会触发自动构建部署动作。下面开始介绍详细步骤。


一、jenkins配置

下面是笔者所有的构建任务
使用jenkins+gitee提交代码时自动构建_jenkins自动构建

这里就拿usetu-gateway这个构建任务来演示,我的jenkins版本是2.492.3,依赖的JDK版本是17,关于jenkins如何部署安装,以及需要的其他组件支持,笔者这里有专门的一篇博客介绍:jenkins部署使用教程

  1. 点击usteu-gateway任务
    使用jenkins+gitee提交代码时自动构建_jenkins自动构建
  2. 点击配置

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

  1. 点击triggers

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

注意看下有没有​ Generic Webhook Trigger​ 插件,没有要去下载,jenkins中有很多其他的方式触发自动构建的,但是笔者尝试几种以后发现还是这个Generic Webhook Trigger​最好用,不太容易出现什么问题。下面展示的就是Generic Webhook Trigger​相关的配置信息。

为了根据Gitee提交信息中的关键字(如build)触发Jenkins自动构建,请按照以下步骤配置 ​Generic Webhook Trigger​ 插件:


​步骤 1:启用Generic Webhook Trigger​

  1. 在 ​构建触发器​ 部分,勾选 ​Generic Webhook Trigger。
  2. 在生成的配置中,设置以下内容:

​步骤 2:配置触发条件(根据commit message过滤)​​

  1. POST Content参数提取​
  • 添加一个参数,用于提取所有提交的message内容。填写以下信息:
    • ​Variable Name​:COMMIT_MESSAGES(自定义变量名)
    • ​Expression​:$.commits[*].message
      (JSONPath语法,提取所有commits中的message字段)
    • ​JSONPath​:勾选此选项。
  1. Token配置​
  • 设置一个Token(如gitee-trigger),用于保护Webhook URL,防止未经授权的触发。
  1. ​过滤条件​:
  • 在 ​Token​ 输入框下,找到 ​Optional Filter​:
    • ​Expression​:.build.
      (正则表达式,确保至少有一个message包含build关键字)
    • ​Text​:$COMMIT_MESSAGES
      (将提取的COMMIT_MESSAGES内容作为过滤的输入源)

下面是图示部分内容

找到Post content parameters,点击新增,勾选填写以下信息

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

token设置

使用jenkins+gitee提交代码时自动构建_jenkins自动构建
这个token怎么来的?是jenkins帮我们生成的(最好按照下面的步骤提前生成,保存好),具体步骤如下

点击右上角

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

点击左边列表的Security,添加新token,这里是为了演示所以新建了一个token,这个token要记好,专门为usteu-gateway任务服务的,前面的Token 创建于 2025-04-30T16:06:00.883730421+08:00这个是自动生成的,名字可以改成你自己为哪个任务生成的token,便于区分

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

点击save或者应用即可,当然前提是下面的源码管理,已经配置好了相关的拉取代码的配置,这个在前面提供的另一篇博客地址中已经说明了

使用jenkins+gitee提交代码时自动构建_jenkins自动构建


除了上面的内容步骤,还需要在gitee上为对应代码仓库添加webhook

URL:http://JENKINS_URL/generic-webhook-trigger/invoke?token=前面生成的token
密码:就是jenkins生成token时登录用户的jenkins登录密码

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

二、测试自动构建

提交的是gateway模块的信息,内容为:自动生成

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

提交后发现没有触发自动构建

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

再把提交时的信息改下,改为:build自动构建

使用jenkins+gitee提交代码时自动构建_jenkins自动构建
发现提交后触发自动构建了
使用jenkins+gitee提交代码时自动构建_jenkins自动构建

到这里就完整实现了笔者一开始希望实现的构建流程,即根据关键字触发自动构建


四、拓展–如何控制单任务构建

笔者在实践过程中,遇到了问题。因为是微服务的,所以必然有多个模块,如网关模块usteu-gateway,认证中心模块usteu-auth,两个模块对应两个构建任务,在gitee上也需要建立两个不同的webhook。笔者分别建立了对应配置后,发现当我使用build关键字提交代码开始触发自动构建部署usteu-gateway时,usteu-auth任务也同时被触发了,这不是我想要的机制,我希望当提交的代码只有usteu-gateway模块的代码时,jenkins只会触发构建usteu-gateway模块,只有当我提交的代码涉及到usteu-gateway和usteu-auth两个模块的代码时,才同时触发usteu-gateway和usteu-auth两个任务模块的同时构建,具体怎么做也部复杂,笔者分析了gitee提交的Payload:

使用jenkins+gitee提交代码时自动构建_jenkins自动构建
发现还有个modified字段提供了修改类的完整路径,包含了其所在模块的名称,所以我对jenkins上各个任务模块的Generic Webhook Trigger做了增强,下面以usteu-gateway任务的配置为例子说明

Post content parameters这个参数配置再新增一个

使用jenkins+gitee提交代码时自动构建_jenkins自动构建
用来提取Payload中的modified中的信息,然后再把底下的
Optional filter的expression和text修改成如下

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

Expression:(?s)(?=.*build)(?=.*usteu-gateway/.*)Text:$COMMIT_MESSAGES $MODIFIED_FILES

usteu-auth也是一样的,新增一个Post content parameters参数,Optional filter的expression和text修改成如下

使用jenkins+gitee提交代码时自动构建_jenkins自动构建

再有其他模块也是一样的,通过对这两个关键词的值的判断过滤,经过笔者亲测,能够实现笔者的按提交代码所在模块分别构建jenkins任务要求。

四、总结

本篇文章并不适应小白,需要有jenkins搭建部署经验。并且以上内容只针对gitee+jenkins这种组合,如果是gitlab+jenkins,那么就需要根据gitLab的Payload的内容来配置了,本篇文章只是提供一个解决思路,主要是笔者自己记录实践过程,同时也提供给大家参考,在搭建部署过程中每个人可能由于各种组件版本的不同,引发各种各样的问题,这需要搭建耐心去思考解决,更重要的是要利用好大模型工具,把你的问题需求描述清除,大模型工具能够很精准高效的提供出解决方案和步骤,笔者上面的方案也是咨询了Deepseek给出的,有专家在,啥都能解决。