Jenkins:是否支持若无TFS变更则跳过.NET项目构建?
Jenkins 如何在 TFS 无新变更时跳过构建
当然有!Jenkins 完全支持这种「无变更则跳过构建」的场景,而且针对 TFS(现在也叫 Azure DevOps Server)有几种成熟的实现方式,刚好适配你的大型.NET解决方案构建流程:
1. 借助 TFS/Azure DevOps 插件的内置功能
如果你用的是 Jenkins 官方的 TFS Plugin 或者 Azure DevOps Plugin,在配置源码管理环节就能直接搞定:
- 先勾选 "Poll SCM"(轮询源码仓库),然后设置合适的检查频率(比如
H/15 * * * *表示每15分钟检查一次) - 关键要开启类似 "Skip if no changes" 的选项(不同插件版本表述可能略有差异,比如有些叫 "Do not build if there are no changes")
开启后,Jenkins 每次检查TFS变更集时,只要自上次成功构建后没有新变更,就会直接跳过后续的构建流程,不会做无用功。
2. 用 Pipeline 脚本手动判断变更
如果你的构建是通过 Jenkinsfile 写的 Pipeline,还能自己写逻辑灵活控制:
pipeline { agent any stages { stage('Check TFS Changes') { steps { script { // 获取上次构建的变更集,对比当前最新变更集 def lastBuildChanges = currentBuild.previousBuild ? currentBuild.previousBuild.changeSets : [] def latestChanges = tfs.getLatestChangeSet() // 具体方法根据你安装的插件调整 if (lastBuildChanges == latestChanges) { echo "自上次构建后TFS无新变更,跳过构建流程" currentBuild.result = 'ABORTED' return } } } } stage('Pull Latest & Build') { steps { // 你的拉取变更集和构建脚本 bat 'tf get /latest /recursive' bat 'msbuild YourSolution.sln /p:Configuration=Release' } } } }
注意:不同TFS插件提供的变更集获取方法可能不同,比如有些直接通过 changeSets 属性就能拿到,需要根据你实际安装的版本调整脚本。
3. 配合 TFS Webhook 触发构建(更高效)
如果你不想用轮询,还可以让TFS有变更时主动通知Jenkins触发构建——这种方式本身就天然实现了「无变更不构建」:只有当TFS有新提交或变更集时,才会发送Webhook给Jenkins启动构建,完全避免无意义的轮询和空构建。
配置思路大概是:
- 在 TFS/Azure DevOps Server 中给项目配置 Webhook,指向 Jenkins 的
job/{job-name}/build端点 - 在 Jenkins 对应任务里关闭 Poll SCM,开启 "Trigger builds remotely (e.g., from scripts)" 并设置好认证令牌
这种方式对大型项目更友好,既不浪费Jenkins资源在频繁轮询上,又能第一时间响应变更。
另外针对你的.NET解决方案,还有个小技巧:就算不小心触发了空构建,也可以在脚本里加个判断——比如检查变更集里是否有代码文件、配置文件的修改,再决定是否执行完整的构建和部署流程,进一步节省时间。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

