当前位置: 首页 > news >正文

四、jenkins自动构建和设置邮箱

一、jenkins自动构建

什么自动构建、有啥用:

  1. 触发方式

    • 代码提交(Git push)

    • 定时任务(如每天凌晨构建)

    • 手动点击等方式(立即执行)

  2. 执行内容

    • 从 Git/SVN 拉取最新代码

    • 运行编译(如 Maven/Gradle)

    • 执行单元测试、代码扫描

    • 生成部署包(如 JAR/WAR/Docker 镜像)

    • 自动部署到测试/生产环境

  3. 核心价值

    • 省时:无需手动操作,提交代码即触发流程。

    • 可靠:避免人为失误,确保每次构建一致。

    • 快速反馈:失败时立即通知,问题早发现早修复。

一句话总结
Jenkins 自动构建 = “代码提交后,全流程自动化处理,直到软件可运行”

二、自动构建方式

注意:版本不同,自动构建按钮的位置有差距,反正找到自动构建进行。

点击项目

 点击配置

方法1:触发远程构建 

设置密码后保存

目前构建是第5次

现在访问jenkins网址+后面的路径和密码试试,能不能自动构建

 方法2:其他项目构建后触发

意思:就是前面有个项目构建了,构建完成后触发我的项目构建,这种适用于有子项目或者项目有关系的。

目前我的项目构建序号是6,现在我执行我前面那个项目“web_demo_liushui”

刷新项目一看确实自动构建了

方法3:定时任务构建

* * * * * :表示分 时 日 月 周,和linux定时任务类似,但不完全一样,到时候直接让deepseek给你生成想要的时间也行,知道大概逻辑即可。

以下是案例:

现在我们设置下时间,保存看看到时间后,构建不

可以看到我设置的是下午6点47分,时间到了后刷新一下,发现构建了

方法4:轮询SCM
轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。 

大概意思:我用的gitlab仓库,他会扫描我的gitlab,如果gitlab变更了,就会执行构建,如果gitlab没更新,那一直不会自动构建。

注意:这次构建触发器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。

现在我设置一下,设置为2分钟扫描一次gitlab,如果gitlab有变动,给我自动构建。

2分钟过了,一直没构建(以为我没改代码)

现在我idea改代码,提交到gitlab

提交成功后,等待2分钟,刷新项目。

方法5:githook自动触发构建

刚才我们看到在Jenkins的内置构建触发器中,轮询SCM可以实现Gitlab代码更新,项目自动构建,但是该方案的性能不佳。

那有没有更好的方案呢?有的。就是利用Gitlab的webhook发现代码提交或者修改后,gitlab立即触发项目自动构建。

jenkins设置

(1)下载插件:GitLab 、 Gitlab Hook

(注意:新版本jenkins只安装GitLab即可,老版本还得安装Gitlab Hook)

遇到的问题:安装这个插件时,部分安装失败,看报错是已存在部分插件需要先手动跟新下。

插件安装完成后,这里多了一个这种方式的触发器

注意这里有个地址,就是jenkins的项目地址,这个地址要配置到gitlab,下面会说。 

(2)jenkins的全局变量设置

关闭一个东西

 gitlab设置

root登录,开启githook功能,且配置地址

开启githook功能

 

设置项目的发送地址

 

 

添加成功后,测试一下。发现测试通了

 

验证 

修改idea代码,提交,会自动构建

看tomcat项目更新了,没问题

 三、分支构建

例如说我们实际项目中会使用时又uat、sit、生产等环境。

jenkins可以根据设置,选择我们想启动的分支。

jenkins设置

进入项目,添加参数

设置参数名和默认值

 

自带默认值

 

idea设置

 

提交代码,build一下

 

新增一个uat分支

新增一个uat分支

 

创建成功,已经在uat分支了

同时查看gitlab也多了一个uat分支

修改代码,提交到uat分支

 

 build选择uat

看日志,看tomcat已经是uat项目

 

 build选择master

 四、邮箱配置

安装插件

email extension template

配置邮箱

插件安装成功后,进入全局配置

 配置这一块

在配置这一块

在最上面,搜索系统管理员邮箱地址配置上

 

当面倒数第2个图里的那个test config……也可以验证下邮箱是不是通了

验证邮箱配置成功

 

 给项目配置邮件发送

给具体某个项目配置,项目启动成功后,发送邮箱,idea新增文件email.html,内容如下

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head><body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"offset="0">
<table width="95%" cellpadding="0" cellspacing="0"style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"><tr><td>(本邮件是程序自动下发的,请勿回复!)</td></tr><tr><td><h2><font color="#0000FF">构建结果 - ${BUILD_STATUS}</font></h2></td></tr><tr><td><br /><b><font color="#0B610B">构建信息</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>项目名称&nbsp;:&nbsp;${PROJECT_NAME}</li><li>构建编号&nbsp;:&nbsp;第${BUILD_NUMBER}次构建</li><li>触发原因:&nbsp;${CAUSE}</li><li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li><li>构建&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li><li>工作目录&nbsp;:&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li><li>项目&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li></ul></td></tr><tr><td><b><font color="#0B610B">Changes Since LastSuccessful Build:</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li></ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"}</td></tr><tr><td><b>Failed Test Results</b><hr size="2" width="100%" align="center" /></td></tr><tr><td><prestyle="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre><br /></td></tr><tr><td><b><font color="#0B610B">构建日志 (最后 100行):</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><textarea cols="80" rows="30" readonly="readonly"style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea></td></tr>
</table>
</body>
</html>

然后jenkinsfile引用上面的文件

pipeline {agent anystages {stage('pull code') {steps {checkout scmGit(branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'dd118ea3-a9af-414b-9e56-3316395b041f', url: 'http://192.168.157.159:82/testjenkinszu/web_demo.git']])}}stage('build project') {steps {sh 'mvn clean package'}}stage('publis project') {steps {deploy adapters: [tomcat9(credentialsId: '0c67a409-c11f-46a0-ac46-f659c6097b0a', path: '', url: 'http://192.168.157.160:8090')], contextPath: null, war: 'target/*.war'}}}post {always{emailext(subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',body: '${FILE,path="email.html"}',to:'2311685383@qq.com')}}
}

然后提交到gitlab,build一下,看看有没发邮箱。我这没法,但没报错,方式是这么个方法,没法邮箱也没排查出来,估计某个地方不对。

这个发邮箱生产、测试估计都用不到,用到了在排查吧。 

http://www.lryc.cn/news/581271.html

相关文章:

  • PHP语法基础篇(九):正则表达式
  • CppCon 2018 学习:Smart References
  • 有限状态机(Finite State Machine)
  • 相机位姿估计
  • 2 大模型高效参数微调;prompt tunning
  • 【Linux】自旋锁和读写锁
  • 全素山药开发指南:从防痒处理到高可用食谱架构
  • DeepSeek扫雷游戏网页版HTML5(附源码)
  • C#指针:解锁内存操作的底层密码
  • 机械时代的计算
  • 【Linux】常用基本指令
  • 爬虫工程师Chrome开发者工具简单介绍
  • 推荐算法系统系列五>推荐算法CF协同过滤用户行为挖掘(itembase+userbase)
  • Python实例题:基于 Python 的简单电子词典
  • 洛谷刷题9
  • Django中关于templates目录和static目录存放位置的总结
  • Django跨域
  • python使用fastmcp包编写mcp服务端(mcp_server)和mcp客户端(mcp_client)
  • jxWebUI--用数据表输入输出数据
  • 前端进阶之路-从传统前端到VUE-JS(第三期-VUE-JS配套UI组件的选择)(Element Plus的构建)
  • SQL 表结构转 Go、Java、TS 自定义实体类,支持自编模板
  • 学习日志04 python
  • 解决kali Linux在VMware中的全局缩放问题
  • Linux:多线程---深入互斥浅谈同步
  • jvm架构原理剖析篇
  • Python之--基本知识
  • App爬虫实战篇-以华为真机手机爬取集换社的app为例
  • 11_架构演进:从单体到云原生的蜕变
  • 【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
  • Apache 配置文件提权的实战思考