You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Mercurial插件无法检测代码变更,如何解决?

解决Jenkins Mercurial流水线无法检测变更的问题

从你给出的轮询日志里的no polling baseline就能定位到核心问题:Jenkins还没有在工作区建立用于对比变更的基线版本,所以哪怕钩子触发了轮询,也没有参照的版本来判断是否有变更。下面是一步步的解决步骤:

1. 先手动触发一次初始构建

这是最关键的一步。Jenkins的SCM轮询机制依赖于已完成的构建生成的基线信息,现在你的工作区/var/lib/jenkins/workspace/test-repo里完全没有基线数据,自然没法检测变更。

直接在Jenkins控制台找到polling-test流水线,手动点击"立即构建"。这次构建会拉取仓库的当前代码,同时在工作区生成轮询必需的基线标记文件。

2. 核对SCM配置的细节

检查你的流水线checkout步骤的几个关键配置:

  • 确认credentialsId: 'jenkins'对应的凭据拥有目标Mercurial仓库的拉取权限,能正常通过ssh://hg-user@hg-server/test-repo访问仓库(可以在Jenkins服务器上用jenkins用户手动执行hg clone ssh://hg-user@hg-server/test-repo测试)
  • 确保revision: 'default'是你实际推送变更的分支——如果你的变更推送到了其他分支,轮询肯定检测不到

3. 确保推送钩子的URL完全匹配

你用curl触发的钩子URL是https://jenkins-server/mercurial/notifyCommit?url=ssh://hg-user@hg-server/test-repo,这个URL必须和流水线checkout步骤里的source地址完全一致,包括大小写、SSH端口(如果有的话)、路径细节。Jenkins的Mercurial插件是严格匹配仓库URL来关联对应流水线的,哪怕一点点差异都会导致钩子触发了但找不到要轮询的流水线。

4. 检查工作区的权限

确保Jenkins系统用户(一般是jenkins用户)对/var/lib/jenkins/workspace/test-repo目录有完整的读写权限,不然没法创建和更新基线文件。可以在Jenkins服务器上执行以下命令检查:

ls -ld /var/lib/jenkins/workspace/test-repo

如果权限不正确,执行下面的命令调整:

chown -R jenkins:jenkins /var/lib/jenkins/workspace/test-repo

5. 验证修复效果

完成上面的步骤后,再做一次仓库变更并推送:

echo "verify fix" > verify.txt
hg add verify.txt
hg commit -m "test polling fix"
hg push

然后再次用curl触发轮询:

curl "https://jenkins-server/mercurial/notifyCommit?url=ssh://hg-user@hg-server/test-repo"

这次轮询应该能检测到变更,自动触发新的构建了。

另外,你的Jenkins和Mercurial插件版本不算最新,但这个问题的核心是基线缺失,上面的步骤应该能解决。如果后续还有问题,可以考虑更新到对应Jenkins版本支持的最新Mercurial插件版本。

内容的提问来源于stack exchange,提问作者RogerFC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:07:44