You need to enable JavaScript to run this app. Jenkins声明式Pipeline中Copy Artifact报错找不到Coverity Test构建制品咨询
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins声明式Pipeline中Copy Artifact报错找不到Coverity Test构建制品咨询

问题诱因
  • 变量解析逻辑错误:代码中selector: specific ('${BUILD_NUMBER}')使用单引号包裹占位符,Groovy语法下单引号字符串不会执行变量插值,实际传递给Copy Artifacts插件的是字面量字符串${BUILD_NUMBER},插件无法匹配到任何真实构建。同时${BUILD_NUMBER}默认指向当前MainBuild任务的构建号,并非刚触发的Coverity Test任务的构建号,匹配逻辑从根源上失效。
  • 下游构建上下文丢失:执行build步骤触发Coverity Test时,没有将下游构建的返回对象持久化到变量中,插件无法定位到本次Pipeline触发的对应Coverity Test构建记录,因此抛出“找不到可复制制品的构建”报错。
  • 任务路径不匹配:如果Coverity Test任务存放在Jenkins的文件夹层级下而非根目录,仅填写短任务名Coverity Test会因为全路径缺失,无法定位到目标任务。
修复方案

按以下逻辑调整代码即可解决问题:

  1. 触发下游Coverity Test构建时,将build步骤的返回值(包含下游构建的编号、路径等元信息)存入自定义变量
  2. 使用双引号包裹选择器参数,将存储的下游构建号传入specific选择器,替换原错误的占位符
  3. 若任务存在文件夹层级,在projectName字段填写任务的完整Jenkins路径

修正后的可直接运行的Pipeline代码:

stage('Coverity Test') {
    when { expression { params.CoverityReport == true } }
    steps {
        // 触发Coverity Test构建,将构建元信息存入covBuild变量
        def covBuild = build job: 'Coverity Test',
            parameters: [
                string(
                    name: 'COVERITY_TOOL_HOME',
                    value: '/home/coverity/cov-analysis-linux64-2020.03'
                ),
                string(name: 'GIT_BRANCH', value: "${env.PROJ_GIT_BRANCH}")
            ]

        // 从Coverity Test构建中复制目标制品
        copyArtifacts(
            filter: 'CoverityCrit*Issues.txt',
            fingerprintArtifacts: true,
            projectName: 'Coverity Test',
            // 用双引号保证变量解析,传入真实的下游构建号
            selector: specific("${covBuild.number}")
        )
    }
}

补充注意事项

  • Groovy字符串规则:单引号为纯静态字符串,不会解析内部的${}变量占位符,需要动态传参时必须使用双引号
  • 保持build步骤的wait参数为默认值true(即等待下游Coverity Test构建完成后再执行复制逻辑),避免因下游构建未完成导致制品尚未生成的问题
  • 若需排除其他触发源的历史构建干扰,通过存储的下游构建号做精确匹配的方式,比插件默认的“最近一次构建”选择器可靠性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 04:57:02