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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:57