windows配置Jenkins自动化定时任务+测试报告发送

一、Jenkins的安装步骤

  1. JDK安装

    • 没有JDK的先安装JDK
    • https://adoptium.net/zh-CN/temurin/releases/?os=any&arch=any&version=21
  2. 下载Jenkins

    • 由于JDK 1.8仅适配Jenkins 2.357之前的版本(如2.346.1及以下),需从旧版本渠道下载:
      • Filehorse网站:访问 https://www.filehorse.com/download-jenkins/72492/ 下载Jenkins 2.346.1的Windows安装包。
      • 官方归档页面:访问 https://archives.jenkins.io/,在归档中按版本号(如2.346.1)和发布日期查找对应Windows安装文件(.msi或.zip)。
    • 注意:最新LTS版本(如2.357及以上)需JDK 11+,请勿下载最新版。
    • Jenkins 官方 Java 版本支持矩阵
    • 在这里插入图片描述
  3. 启动Jenkins服务

    • 安装完成后,Jenkins服务会自动启动。你可以通过访问http://localhost:8080 来验证是否启动成功。
    • 若服务未启动,可在命令提示符中执行以下命令启动服务:
      net start jenkins
      
  4. 解锁Jenkins

    • 首次访问Jenkins时,需要输入初始管理员密码。你可以在以下路径找到该密码:
      C:\ProgramData\Jenkins\.jenkins\secrets\initialAdminPassword
      
    • 将密码复制到解锁页面,然后按照向导完成Jenkins的初始化配置。

二、全局变量配置

  1. 配置JDK全局变量

    • 进入Jenkins管理界面,点击"Manage Jenkins",接着选择"Global Tool Configuration"。
    • 找到"JDK"部分,点击"Add JDK"。
    • 输入JDK名称(例如:JDK1.8),取消勾选"Install automatically"。
    • 在"JAVA_HOME"字段中,填入JDK的安装路径,如:C:\Program Files\Java\jdk1.8.0_271
    • 最后点击"Apply"和"Save"保存设置。
  2. 配置Git全局变量

    • 若你还未安装Git,请先从https://git-scm.com/download/win 下载并安装。Git的版本也不能太低或者太高
    • 在Jenkins管理界面,点击"Manage Jenkins",然后选择"Global Tool Configuration"。
    • 找到"Git"部分,点击"Add Git"。
    • 输入Git名称(例如:Git),在"Path to Git executable"字段中,填入Git的安装路径,如:C:\Program Files\Git\cmd\git.exe
    • 点击"Apply"和"Save"保存设置。

✅ 完整 Jenkins 自由风格项目配置攻略(更新版)

🎯 目标功能清单

功能状态
🕒 每隔 10 分钟自动触发一次✅ 支持
🔧 参数化输入:PLATFORM, DEVICE_ID, TESTCASE✅ 支持
💬 手动运行时可自定义参数值✅ 支持
⚙️ 定时任务使用默认值运行✅ 支持
📁 工作空间目录 = Jenkins Job 名称 + 代码仓库名称✅ 支持
📤 构建完成后发送邮件✅ 支持
📎 邮件中附带最新 Allure 报告链接✅ 支持
📩 收件人支持变量或固定地址✅ 支持
📊 自动生成 Allure 测试报告✅ 支持

🔧 第一步:新建自由风格项目(Freestyle Project)

  1. 登录 Jenkins 控制台;
  2. 点击 New Item
  3. 输入任务名称(如 AndroidSmoke);
  4. 选择 Freestyle project
  5. 点击 OK

🔧 第二步:启用参数化构建(Parameterized Build)

进入你的 Job 页面 → Configure

勾选:

This project is parameterized

添加以下三个 String Parameter

NameDefault Value (示例)Description
PLATFORMAndroid平台名称
DEVICE_IDemulator-5554设备 ID
TESTCASEtest_smoke要执行的测试用例名

保存后,你可以手动运行时修改这些值,定时任务会使用默认值。


🔧 第三步:设置定时构建(Build periodically)

在同一个页面 → Build Triggers

勾选:

Build periodically

填写定时表达式:

H/10 * * * *

表示:每隔 10 分钟运行一次。


🔧 第四步:配置全局环境变量(如 HOME)

进入:

Manage Jenkins > Configure System

找到:

Global properties
勾选 Environment variables
添加:

NameValue
HOMEC:\Users\4388(替换成你的用户名)

这可以确保 Jenkins 在不同机器上都能正确访问 .ssh 文件夹和 SSH 私钥。


🔧 第五步:编写完整的 Windows Batch 构建脚本

进入你的 Job → ConfigureBuild
点击 Add build stepExecute Windows batch command

粘贴以下完整脚本(适配动态报告目录 + SSH 免卡顿):

@echo offREM 设置 HOME 环境变量(用于 SSH)
set HOME=C:\Users\4388REM 自动信任 GitHub 主机指纹
echo github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= >> "%HOME%\.ssh\known_hosts"REM 获取当前 Job 名称
set WORKSPACE_NAME=%JOB_NAME%REM 进入 Jenkins 默认工作空间目录
cd /d "%WORKSPACE%"REM 定义代码目录
set CODE_DIR=%WORKSPACE%\SuuntoTestREM 克隆或更新代码
if not exist "%CODE_DIR%\.git" (echo === 第一次克隆代码 ===git clone git@github.com:SportsTrackingTechnologies/SuuntoTest.git SuuntoTest
) else (echo === 更新现有代码 ===cd %CODE_DIR%git fetchREM 根据实际分支名替换 master/main/devgit pull origin dev
)REM 进入项目目录
cd %CODE_DIR%REM 创建虚拟环境(如果不存在)
if not exist ".venv" (echo === 创建 Python 虚拟环境 .venv ===python -m venv .venv
)REM 激活虚拟环境
call .venv\Scripts\activate.batREM 忽略 pipenv 警告
set PIPENV_IGNORE_VIRTUALENVS=1REM 安装 pipenv(如未安装)
where pipenv >nul 2>nul
if ERRORLEVEL 1 pip install pipenvREM 安装依赖
pipenv installREM 设置 allure-results 输出路径并创建目录
set ALLURE_RESULTS_DIR=%CODE_DIR%\log\allure-results
if not exist "%ALLURE_RESULTS_DIR%" mkdir "%ALLURE_RESULTS_DIR%"REM 执行测试脚本
python run_jenkins_main.py %PLATFORM% %DEVICE_ID% "%TESTCASE%" "%ALLURE_RESULTS_DIR%"REM 获取 log 目录下最新的子目录名称(按修改时间排序)
:: for /f "delims=" %%F in ('dir /b /ad /o-d log ^| findstr /v "allure"') do (
::     set latest_dir=%%F
::     goto :done
:: )
:: :done:: echo 最新目录为: %latest_dir%REM 使用 setx 注入临时环境变量(仅限当前会话)
:: set LATEST_DIR "%latest_dir%"REM 强制返回 0,防止 Jenkins 因 exit code 报错
exit /b 0

🔧 第六步:安装并配置 Allure 插件(生成可视化报告)

1. 安装插件

进入 Jenkins → Manage Jenkins > Manage Plugins

搜索并安装:

Allure Jenkins Plugin

2. 配置 Allure Commandline 路径

进入 Jenkins → Manage Jenkins > Global Tool Configuration

找到 Allure Commandline 区域,点击 Allure installations…

添加一个安装项:

字段示例值
NameAllure-2.21.0
PathD:\tools\allure-2.21.0(你实际解压的路径)

✅ 勾选 Installed by Jenkins(如果你希望 Jenkins 自动下载)

或者不勾选,手动填写你本地安装路径即可。

保存设置。

3. 在 Job 中配置 Allure Report 展示

进入你的 Job → ConfigurePost-build Actions

✅ 添加:

Allure Report

填写:

  • Results directory: SuuntoTest/log/*/allure-results
    (通配符 * 表示匹配任意最新目录)
  • Allure Commandline: Allure-2.21.0(你刚刚配置的名称)

保存后,每次构建完成后 Jenkins 会自动生成并展示 Allure 报告。


🔧 第七步:配置邮件通知(163 邮箱)

1. 安装邮件插件

进入 Jenkins → Manage Jenkins > Manage Plugins

安装以下插件:

插件名称用途
Email Extension Plugin邮件扩展支持
Email-ext Template HTML email支持 HTML 邮件模板
Mailer简单邮件发送器

重启 Jenkins。

2. 配置 SMTP 邮箱服务器(163)

进入 Jenkins → Manage Jenkins > Configure System

向下滚动到 Extended E-mail Notification

填写如下信息:

字段示例值
SMTP serversmtp.163.com
Use SSL✅ 勾选
SMTP port587(推荐)或 465
Useryour_email@163.com
Passwordyour-smtp-auth-code(SMTP 授权码)
Admin e-mail addressyour_email@163.com
Default user e-mail suffix@163.com(可选)

❗ 推荐使用端口 587 + TLS 加密,避免企业网络限制。

3. 在 Job 中添加邮件通知

进入你的 Job → ConfigurePost-build Actions

✅ 添加:

Editable Email Notification
Recipients:
dengping@suunto.cn
Content Type:
text/html
Default Content(HTML 内容):
<h3>Jenkins 自动化测试已完成</h3>
<p>项目名称: ${JOB_NAME}</p>
<p>构建编号: ${BUILD_NUMBER}</p>
<p>平台: ${PLATFORM}</p>
<p>设备ID: ${DEVICE_ID}</p>
<p>测试用例: ${TESTCASE}</p>
<p>Allure 报告地址:<a href="${JOB_URL}ws/SuuntoTest/log">点击查看本次 Allure 报告</a></p
Trigger:

建议至少添加两个触发条件:

  • Failure:构建失败时通知
  • Success:构建成功时通知

✅ 保存后重新运行构建任务,你应该能看到邮件发送成功。


📌 特别说明:DEFAULT_RECIPIENTS 变量在哪里设置?

方法一:在 Jenkins 全局变量中设置(推荐)

进入:

Manage Jenkins > Configure System

找到:

Global properties
勾选 Environment variables
添加:

NameValue
DEFAULT_RECIPIENTSdengping@suunto.cn

这样所有使用 ${DEFAULT_RECIPIENTS} 的 Job 都能统一收件人。


✅ 总结:163 邮箱推荐配置汇总

配置项推荐值
SMTP Serversmtp.163.com
SMTP Port587(推荐)或 465
Use SSL/TLS✅ 勾选
Useryour_email@163.com
PasswordSMTP 授权码(不是登录密码)
Recipient list收件人邮箱,多个用英文逗号分割
Jenkins 用户权限✅ 使用本地账户运行 Jenkins(非 SYSTEM)
Jenkins 邮件插件✅ 安装 Email Extension PluginEmail-ext Template HTML email

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88373.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88373.shtml

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

相关文章

预训练语言模型基础知识概述

文章目录 预处理语言模型的发展预训练语言模型统计语言模型神经网络语言模型 词向量onehot编码词嵌入word embedding Word2Vec模型RNN和LSTMRNNLSTM ELMo模型预训练下游任务 Attention自注意力Masked Self AttentionMulti-head Self Attention 位置编码Transformer概念GPT概念B…

浏览器工作原理24 [#]分层和合成机制:为什么css动画比JavaScript高效

引用 《浏览器工作原理与实践》 本文主要讲解渲染引擎的分层和合成机制&#xff0c;因为分层和合成机制代表了浏览器最为先进的合成技术&#xff0c;Chrome 团队为了做到这一点&#xff0c;做了大量的优化工作。了解其工作原理&#xff0c;有助于拓宽你的视野&#xff0c;而且也…

【数字后端】-什么是RC corner? 每种Corner下有什么区别?

芯片的寄生参数可以在多个corner下提取&#xff0c;他们对应了不同情况的net delay Typical&#xff1a;R和C都是标准值Cmax(Cworst)&#xff1a;C最大的互连角&#xff0c;R小于TypicalCmin(Cbest)&#xff1a;C最小&#xff0c;R大于TypicalRCmax(RCworst)&#xff1a;互连线…

HarmonyOS开发基础 --鸿蒙仓颉语言基础语法入门

仓颉编程语言是华为自主研发的一种面向全场景应用开发的现代编程语言&#xff0c;具有高效编程、安全可靠、轻松并发和卓越性能等特点。本节将简单介绍仓颉语言的部分语法和使用&#xff0c;帮助开发者快速上手。 1.3.1&#xff1a;数据类型 整数 仓颉把整数分为有符号和无符…

Excel文件比较器v1.3,html和js写的

Excel文件比较器v1.3 版本说明&#xff1a;v1.3 1添加支持文件格式&#xff1a;CSV。 2&#xff0c;添加60条历史记录保存功能 - 用于保存比对结果。历史记录保存在浏览器的localStorage中&#xff0c;这是一个浏览器提供的本地存储机制&#xff0c;数据会一直保留直到用户…

Kimi“新PPT助手” ,Kimi全新自研的免费AI生成PPT助手

大家好&#xff0c;这里是K姐。 一个帮你用AI轻松生成精美PPT的女子。 前段时间给大家分享了一期用智能体做PPT的对比测评&#xff0c;很多友友都表示&#xff1a;那 Kimi 呢&#xff1f; 今天偶然发现 Kimi 新增了一个叫“新PPT助手”的功能&#xff0c;立马上手体验了一下…

MySQL DATETIME类型存储空间详解:从8字节到5字节的演变

在MySQL数据库设计中&#xff0c;DATETIME类型用于存储日期和时间信息&#xff0c;但其存储空间大小并非固定不变&#xff0c;而是随MySQL版本迭代和精度定义动态变化。本文将详细说明其存储规则&#xff0c;并提供清晰的对比表格。 一、核心结论 MySQL 5.6.4 是分水岭&#…

Gartner发布中国企业应用生成式AI指南:避免12 个 GenAI 陷阱

GenAI 技术&#xff08;例如 AI 代理和 DeepSeek&#xff09;的快速迭代导致企业抱有不切实际的期望。本研究借鉴了我们与中国 AI 领导者就常见的 GenAI 陷阱进行的讨论&#xff0c;并提供了最终有助于成功采用的建议。 主要发现 接受调查的首席信息官表示&#xff0c;生成式人…

Vue3中ref和reactive的区别与使用场景详解

在 Vue 3 中&#xff0c;响应式系统进行了全新设计&#xff0c;ref 和 reactive 是其中的核心概念。 ### 一、ref 的使用 ref 适用于基本数据类型&#xff0c;也可以用于对象&#xff0c;但返回的是一个带 .value 的包装对象。 js import { ref } from vue const count ref(…

React性能优化:父组件如何导致子组件重新渲染及避免策略

目录 React性能优化&#xff1a;父组件如何导致子组件重新渲染及避免策略什么是重新渲染&#xff1f;父组件如何"无辜"地让子组件重新渲染&#xff1f;示例 1: 基础父组件状态变更示例 2: 传递未变化的原始类型Prop示例 3: 传递引用类型Prop&#xff08;对象&#xf…

图的拓扑排序管理 Go 服务启动时的组件初始化顺序

在构建复杂的 Go 应用程序时&#xff0c;服务的启动过程往往涉及多个组件的初始化&#xff0c;例如日志、配置、数据库连接、缓存、服务管理器、适配器等等。这些组件之间通常存在着复杂的依赖关系&#xff1a;日志可能需要配置信息&#xff0c;数据库连接可能依赖日志和追踪&a…

【物理重建】SPLART:基于3D高斯泼溅的铰链估计与部件级重建

标题&#xff1a;《SPLART: Articulation Estimation and Part-Level Reconstruction with 3D Gaussian Splatting》 项目&#xff1a;https://github.com/ripl/splart 文章目录 摘要一、引言二、相关工作2.1 数据驱动的铰链学习2.2 物体重建的表征方法2.3 铰链物体重建 三、方…

vscode中vue自定义组件的标签失去特殊颜色高亮

遇到的问题 最近接触了一个历史遗留项目时&#xff0c;我遭遇了堪称"史诗级屎山"的代码结构——各种命名混乱的自定义组件和原生HTML标签混杂在一起&#xff0c;视觉上完全无法区分。这让我突然想起&#xff0c;之前在使用vue或者其他框架开发的时候&#xff0c;只要…

【Dify精讲】第19章:开源贡献指南

今天&#xff0c;让我们深入 Dify 的开源贡献体系&#xff0c;看看这个项目是如何在短短时间内聚集起一个活跃的开发者社区的。作为想要参与 Dify 开发的你&#xff0c;这一章将是你的实战指南。 一、代码贡献流程&#xff1a;从想法到合并的完整路径 1.1 贡献前的准备工作 …

Web攻防-CSRF跨站请求伪造Referer同源Token校验复用删除置空联动上传或XSS

知识点&#xff1a; 1、Web攻防-CSRF-原理&检测&利用&防御 2、Web攻防-CSRF-防御-Referer策略隐患 3、Web攻防-CSRF-防御-Token校验策略隐患 一、演示案例-WEB攻防-CSRF利用-原理&构造 CSRF 测试功能点 删除帐户 更改电子邮件 如果不需要旧密码&#xff0c;请…

Drag-and-Drop LLMs: Zero-Shot Prompt-to-Weights

“拖拽式大模型定制”&#xff08;Drag-and-Drop LLMs: Zero-Shot Prompt-to-Weights&#xff09;。 核心问题&#xff1a; 现在的大模型&#xff08;比如GPT-4&#xff09;很厉害&#xff0c;但想让它们专门干好某个特定任务&#xff08;比如解数学题、写代码&#xff09;&am…

抖音视频怎么去掉抖音号水印保存

随着抖音成为短视频平台的领军者&#xff0c;越来越多的人喜欢在上面拍摄、观看和分享各种创意内容。对于用户来说&#xff0c;下载抖音视频并去除水印保存&#xff0c;以便后续使用或分享成为了一种常见需求。抖音号水印的存在虽然能帮助平台追溯视频源头&#xff0c;但也让许…

【RAG技术(1)】大模型为什么需要RAG

文章目录 为什么需要RAG&#xff1f;RAG的工作原理关键的Embedding技术 RAG vs 模型微调&#xff1a;选择的核心逻辑RAG的关键挑战与解决思路1. 检索质量决定一切2. 上下文长度限制 实际应用场景分析企业知识问答技术文档助手法律咨询系统 构建RAG系统的关键步骤总结 为什么需要…

JS红宝书笔记 - 8.1 理解对象

对象就是一组没有特定顺序的值&#xff0c;对象的每个属性或者方法都可由一个名称来标识&#xff0c;这个名称映射到一个值。可以把对象想象成一张散列表&#xff0c;其中的内容就是一组名值对&#xff0c;值可以是数据或者函数 创建自定义对象的通常方式是创建Object的一个新…

Meson介绍及编译Glib库

一.概述 1.Meson 的简介 Meson&#xff08;The Meson Build System&#xff09;是个项目构建系统&#xff0c;类似的构建系统有 Makefile、CMake、automake …。 Meson 是一个由 Python 实现的开源项目&#xff0c;其思想是&#xff0c;开发人员花费在构建调试上的每一秒都是…