如何在Jenkins中手动配置scm对象并展示构建元信息?
Jenkins Pipeline手动创建SCM适配Gerrit触发及元信息显示问题解决
1. 优化Gerrit环境变量的使用(提升代码拉取精准性)
你当前的配置已能正常拉取代码,可通过GERRIT_PATCHSET_REVISION替代FETCH_HEAD,让拉取逻辑更明确:
scm = [ $class: "GitSCM", userRemoteConfigs: [[ credentialsId: "<MY_ID>", url: "<MY_REPO_URL>", refspec: env.GERRIT_REFSPEC ]], branches: [[name: env.GERRIT_PATCHSET_REVISION]], // 直接指向Gerrit触发的补丁集版本 extensions: [[$class: "CleanCheckout"]] // 可选:确保每次构建为干净检出 ] checkout scm
这种方式避免了FETCH_HEAD可能带来的引用不确定性,精准匹配当前触发的Gerrit变更。
2. 让构建概览页显示SCM元信息
手动创建的scm对象不会自动关联到当前构建,需主动调用API绑定:
核心步骤:绑定SCM到当前构建
在checkout scm执行后添加以下代码:
checkout scm // 将SCM对象关联到当前构建,触发概览页的元信息展示 currentBuild.setSCM(scm)
执行后,构建概览页应能显示仓库地址、补丁集版本等元信息。
补充:手动绑定变更集(若上述步骤无效)
如果概览页仍未显示变更记录,可通过Git插件API手动构建变更集:
import hudson.plugins.git.GitChangeSet import hudson.plugins.git.GitChangeSetList // 利用Gerrit环境变量构建变更集对象 def changeSet = new GitChangeSet( env.GERRIT_PATCHSET_REVISION, env.GERRIT_PROJECT, env.GERRIT_BRANCH ) // 将变更集绑定到当前构建 currentBuild.changeSets = [new GitChangeSetList(scm, [changeSet])]
关键说明
- 确保Jenkins版本≥2.300、Git插件版本≥4.10,这些API在旧版本中可能不支持。
- 无需额外的
updateMetaInfo类方法,currentBuild.setSCM(scm)是官方支持的绑定方式。
内容的提问来源于stack exchange,提问作者frans
相关产品推荐
相关产品推荐

