Jenkins多仓库检出后如何合并侧边栏Git Build Data项
问题解决方案
1. 合并多个“Git Build Data”为单个条目,不丢失信息
可行。默认每执行一次git步骤,Jenkins Git插件会自动生成一个独立的“Git Build Data”侧边栏条目。你可以通过以下两步实现合并:
- 禁用单个检出的条目生成:在共享库的
gitCheckout方法中,给git步骤添加changelog: false参数,阻止每个检出操作生成单独的Git Build Data。 - 手动汇总所有仓库信息:完成所有仓库检出后,遍历每个仓库目录,提取分支、提交哈希、提交信息等核心数据,再通过自定义方式生成一个汇总的“Git Build Info”侧边栏条目,包含所有仓库的信息。
修改后的共享库gitCheckout代码:
def call(Map config = [:]) { dir("${config.dir}") { print "Checkout ${config.dir} config.branch=${config.branch} url=${config.url} credentials=${config.credentialsId}" // 添加changelog: false,禁止生成单独的Git Build Data条目 git branch:"${config.branch}", credentialsId: "${config.credentialsId}", url: "${config.url}", changelog: false } }
2. 侧边栏设置树形结构
可以实现。利用HTML的<details>和<summary>标签创建折叠式树形结构,再通过HTML Publisher插件将这个自定义HTML报告添加到侧边栏。点击“Git Build Info”即可展开查看所有仓库的详细信息,收起时仅显示单个条目,大幅降低视觉干扰。
3. 自定义侧边栏内容
完全支持自定义,常用实现方式包括:
- HTML Publisher插件:生成包含自定义样式(如树形结构)的HTML报告,将其添加到侧边栏。
- Sidebar Link插件:直接添加自定义链接到侧边栏,可指向内部报告或外部资源。
- Pipeline代码添加动作:通过
currentBuild.addAction()添加自定义构建动作,或用currentBuild.addShortText()添加简短信息到侧边栏。 - 全局脚本修改:通过Jenkins脚本控制台修改全局侧边栏(不推荐,会影响所有任务,灵活性不如前几种方式)。
完整Pipeline示例(含信息汇总步骤)
在Extract阶段后新增Aggregate Git Info阶段,实现信息汇总与树形侧边栏:
stage('Extract') { parallel 'Extract': { repos.each { myRepo -> if (myRepo.active) { gitCheckout( dir:"${config.applroot}/${myRepo.workspacePath}", credentialsId: "${myRepo.credentialId}", branch:"${myRepo.branch}", url: "${myRepo.url}" ) } } // repos.each } } // Extract stage('Aggregate Git Info') { def gitInfoList = [] repos.each { myRepo -> if (myRepo.active) { def repoDir = "${config.applroot}/${myRepo.workspacePath}" dir(repoDir) { // 提取仓库关键Git信息 def branch = sh(script: 'git rev-parse --abbrev-ref HEAD', returnStdout: true).trim() def shortCommit = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() def commitMsg = sh(script: 'git log -1 --pretty=format:"%s"', returnStdout: true).trim() // 简化仓库名称显示 def repoName = myRepo.url.split('/')[-1].replace('.git', '') gitInfoList.add("${repoName} (${branch}): ${shortCommit} - ${commitMsg}") } } } // 生成带折叠树形结构的HTML内容 def gitInfoHtml = """ <details open> <summary><strong>Git Build Info</strong></summary> <ul style="margin-left: 20px; margin-top: 10px;"> """ gitInfoList.each { info -> gitInfoHtml += "<li>${info}</li>" } gitInfoHtml += "</ul></details>" // 写入临时文件并发布到侧边栏 writeFile file: 'git-build-info.html', text: gitInfoHtml publishHTML(target: [ allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: '.', reportFiles: 'git-build-info.html', reportName: 'Git Build Info', useWrapper: false ]) }
内容的提问来源于stack exchange,提问作者carl verbiest
相关产品推荐
相关产品推荐

