四、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.pswp.cn/pingmian/87949.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习新浪潮】深入解析LLM关键概念:架构、优化与最新研究进展

1. Transformer架构与注意力机制 概念解析 Transformer是LLM的核心架构,由编码器和解码器组成,其核心创新是自注意力机制,通过计算输入序列中每个位置的关联权重,动态聚焦关键信息。自注意力机制的计算复杂度为O(n),在处理长序列时成为性能瓶颈。 代码示例:基础Transfo…

RAGflow图像解析与向量化分析

RAGflow图像解析与向量化分析 注:需要提前部署好ragflow,才方便一 一对应代码,部署教程:rag部署教程,这样才会方便后续更改 1. 图像解析流程 RAGflow通过多种解析器处理不同类型的文档,其中图像解析是一个重要组成部分。以下是RAGflow处理图像的主要流程: 1.1 PDF文…

千翼破界,百景赋能 | 2025深圳eVTOL展无人机场景应用专场即将启幕

在技术革新、应用深化、产业链协同升级及低空空域管理改革等多重政策红利驱动下&#xff0c;我国工业级无人机产业正迈入爆发式增长新阶段&#xff0c;持续引领民用无人机市场繁荣。数据显示&#xff0c;2019 至2024年&#xff0c;我国民用无人机市场规模从435.1亿元跃升至1108…

Go语言标识符命名规则详解:工程化实践

引言 Go语言的命名规则是其简洁哲学和工程实用性的集中体现。下面从语法规范、最佳实践到实际应用进行全面解析&#xff1a; 一、基础命名规则 1. 变量命名 // 小驼峰式&#xff08;lowerCamelCase&#xff09; var userName string var maxRetryCount 3 var isConnected bool…

RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?

第一篇&#xff1a;开篇&#xff1a;为什么RISC-V是颠覆性创新&#xff1f; 打破70年架构垄断&#xff0c;开源硬件如何重塑芯片产业规则&#xff1f;一、传统架构的“围城之困”&#xff08;痛点切入&#xff09; ARM/X86的统治代价 授权费暴利模型 &#xff1a; ARM指令集授权…

【机器学习笔记 Ⅱ】7 多类分类

1. 多类分类&#xff08;Multi-class Classification&#xff09; 定义 多类分类是指目标变量&#xff08;标签&#xff09;有超过两个类别的分类任务。例如&#xff1a; 手写数字识别&#xff1a;10个类别&#xff08;0~9&#xff09;。图像分类&#xff1a;区分猫、狗、鸟等。…

2025年深圳杉川机器人性格测评和Verify测评SHL题库高分攻略

1、杉川机器人包含性格测评和Verify测评&#xff0c;预计用时60min&#xff0c;请确保作答时周围环境无干扰、网络畅通&#xff1b;2、请使用电脑完成作答&#xff0c;建议使用以下浏览器登录&#xff1a;IE9.0及以上版本&#xff0c;火狐&#xff0c;谷歌&#xff1b;3、杉川机…

【flutter 在最新版本中已经弃用了传统的 apply from 方式引入 Gradle 插件】

报错 Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source! Launching lib\main.dart on 2112123AC in debug mode... Running Gradle task assembleDebug...FAILURE: Build failed with an exception.* Where: Script D…

Web后端实战:(部门管理)

1.准备工作 1.1开发规范 1.1.1前后端分离开发 我们目前基本都是采用的前后台分离开发方式&#xff0c;如下图所示&#xff1a; 那么基于前后台分离开发的模式下&#xff0c;我们后台开发者开发一个功能的具体流程如何呢&#xff1f;如下图所示&#xff1a; 需求分析&…

字节寻址(Byte Addressing) 与 Verilog中的寄存器索引

字节寻址&#xff08;Byte Addressing&#xff09; 与 Verilog中的寄存器索引 之间的关系。 您的疑问非常正确&#xff0c;直接看 3h1 很容易让人以为地址就是 0x01。 但答案是&#xff1a;是的&#xff0c;3h1 在这里对应的字节地址&#xff08;Byte Address&#xff09;确实是…

Ubuntu远程桌面

方法1: 检查并使用已安装的VNC或远程桌面组件 请在终端中执行以下命令检查系统中已安装的相关组件: bash# 检查系统中已安装的VNC和远程桌面相关软件 dpkg -l | grep -E "vnc|vino|remote|rdp"# 检查常见远程桌面服务 which vino-server tigervncserver x11vnc xr…

WEB攻防-文件包含LFIRFI伪协议编码算法无文件利用黑白盒

知识点&#xff1a; 1、文件包含-原理&分类&危害-LFI&RFI 2、文件包含-利用-黑白盒&无文件&伪协议 一、演示案例-文件包含-原理&分类&利用 1、原理 程序开发人员通常会把可重复使用的函数写到单个文件中&#xff0c;在使用某些函数时&#xff…

LabVIEW的GPIB仪器校准

基于LabVIEW开发平台与 GPIB 总线技术&#xff0c;采用是德科技、泰克等硬件设备&#xff0c;构建示波器与频谱分析仪自动校准系统。通过图形化编程实现校准流程自动化&#xff0c;涵盖设备连接、参数配置、数据采集、误差分析及报告生成&#xff0c;显著提升校准效率与精度&am…

Zotero中进行文献翻译【Windows11】

zotero官网&#xff1a;https://www.zotero.org/ 1 在Zotero软件中安装插件 进入Zotero百科全书&#xff0c;依次点击&#xff1a;插件→翻译插件→插件介绍→Zotero 中文社区插件商店 进去后搜索pdf2zh&#xff0c;然后下载后放入空白文件夹zotero-pdf2zh 打开Zotero软件后…

用U盘启动制作centos系统最常见报错,系统卡住无法继续问题(手把手)

一、按照操作系统centos7报错如下&#xff08;U盘&#xff09; 按照系统报错如下&#xff1a; ERROR: could not insert ‘floppy’; ERROR: could not insert ‘edd’ : No这种报错很常见&#xff0c;基本上就是u盘启动路径找不到导致&#xff0c;遇到次数比较多所以也比较好解…

C#中的BindingList有什么作用?

在C#中&#xff0c;BindingList<T> 是一个非常重要的集合类&#xff0c;位于 System.ComponentModel 命名空间&#xff0c;主要用于实现数据绑定&#xff08;Data Binding&#xff09;场景。1. 核心作用BindingList<T> 是 List<T> 的增强版&#xff0c;主要提…

Python爬取知乎评论:多线程与异步爬虫的性能优化

1. 知乎评论爬取的技术挑战 知乎的评论数据通常采用动态加载&#xff08;Ajax&#xff09;&#xff0c;这意味着直接使用**<font style"color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">requests</font>****<font style"color:rg…

软件系统测试的基本流程

软件系统测试流程是确保软件质量的规范化过程&#xff0c;涵盖从测试准备到最终上线评估的全周期&#xff0c;通常分为以下6个核心阶段&#xff0c;各阶段紧密衔接、形成闭环&#xff1a; 一、测试启动与规划阶段 核心目标&#xff1a;明确“测什么、谁来测、怎么测”&#xff…

使用Linux操作MySQL数据库分批导出数据为.SQL文件

当数据库某张数据量非常大的表进行其他操作&#xff0c;需要先进行导出时&#xff1b; 先用linux进入操作环境&#xff0c; 1.添加一个export_mysql_batches.sh脚本文件&#xff0c; #!/bin/bash# 数据库连接配置 DB_HOST"36.33.0.138:3306" DB_USER"devuser&qu…

LeetCode 算法题解:链表与二叉树相关问题 打打卡

LeetCode 算法题解&#xff1a;链表与二叉树相关问题 在算法学习和实践中&#xff0c;LeetCode 是一个非常好的平台&#xff0c;它包含了各种各样的算法题目&#xff0c;有助于我们提升编程能力和解决问题的能力。本文将详细讲解在 leetcoding.cpp 文件中实现的一些链表和二叉树…