You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Jenkins Poll SCM无法检测Github提交,如何触发构建?

Jenkins Poll SCM无法检测Github Feature分支提交的解决方案

我之前也碰到过类似的问题,结合你给出的日志和Pipeline脚本,整理了几个实用的排查和解决方向:

1. 确认Jenkins跟踪的分支与远程分支同步

从你的日志里看到Last Built Revision: Revision ecf20b8hhh2f3d63b5809mle268024500364f2fb (refs/remotes/origin/feature/template-api),先做这两步验证:

  • 对比Github上feature/template-api分支的最新提交哈希值,看看和日志里的是否一致。如果不一致,说明Jenkins没拉取到最新的远程代码。
  • 到Jenkins运行构建的节点上,手动执行命令测试拉取:
    cd <你的Jenkins工作目录路径>
    git fetch origin feature/template-api
    git log --oneline origin/feature/template-api
    
    看看输出的最新提交是不是你在Github上推送的内容。如果不是,可能是代理配置(日志里显示设置了http proxy)或者凭据权限问题导致fetch失败。

2. 完善Pipeline中git步骤的配置

你的Pipeline git步骤可以补充几个参数,确保拉取权限和工作目录干净:

node {
  stage('Preparation') {
    git ( 
      poll: true, 
      branch: 'feature/template-api', 
      credentialsId: '8u56qwcf-e74e-44z3-9437-c81b19cd3a29',
      fetchCredentialsId: '8u56qwcf-e74e-44z3-9437-c81b19cd3a29',
      url: 'https://github.developer.company.com/my-project.git',
      clean: true,
      fetchTags: true
    )
  }
}
  • fetchCredentialsId确保拉取远程分支时使用正确凭据
  • clean: true保证每次构建都从干净的工作目录开始,避免旧文件干扰
  • fetchTags: true确保拉取分支关联的标签,避免分支状态判断错误

3. 验证Poll SCM的Cron表达式正确性

你设置的1分钟轮询,对应的Cron表达式必须是* * * * *(格式为:分 时 日 月 周),请确认Jenkins任务配置里的Poll SCM输入框是否准确填写了这个表达式,别出现格式错误(比如多空格、少星号)。

4. 排查全局Poll SCM与Pipeline配置的冲突

你同时勾选了Jenkins任务的「Poll SCM」和Pipeline里的poll: true,这可能导致轮询逻辑冲突。建议二选一:

  • 去掉任务配置里的「Poll SCM」勾选,完全在Pipeline中配置轮询:
    properties([
      pipelineTriggers([
        pollSCM('* * * * *')
      ])
    ])
    node {
      stage('Preparation') {
        git ( 
          branch: 'feature/template-api', 
          credentialsId: '8u56qwcf-e74e-44z3-9437-c81b19cd3a29',
          url: 'https://github.developer.company.com/my-project.git'
        )
      }
    }
    
  • 保留任务配置的「Poll SCM」,删除Pipeline里的poll: true参数,避免重复配置。

5. 手动触发构建更新Last Built Revision记录

有时候Jenkins初始记录的Last Built Revision是旧的,即使远程有新提交,Poll SCM也会误判为无变化。你可以先手动触发一次构建,让Jenkins拉取最新代码并更新这个记录,之后再观察轮询是否正常。

6. 检查分支名称的大小写问题

Git分支名称区分大小写,如果远程分支实际是Feature/Template-API(大小写不同),而你Pipeline里写的是feature/template-api,就会导致Jenkins跟踪错误分支。可以执行git ls-remote -h https://github.developer.company.com/my-project.git查看远程所有分支的准确名称,确保和配置完全一致。


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

火山引擎 最新活动