Jenkins声明式流水线Copy Artifact插件lastCompletedLast选择器用法问询
关于Jenkins copyArtifacts插件lastCompletedLast选择器的正确用法
嘿,这个问题问得很细节!先直接给你结论:你写的selector: lastCompletedLast()是语法错误的,不过你想实现的「复制上一次完成构建产物」的需求,确实有更简洁的官方方案,下面给你拆解清楚:
1. 纠正错误:正确的选择器名称是lastCompleted()
你提到的lastCompletedLast是个笔误,插件官方提供的选择器其实是lastCompleted()——没有后面的那个Last!这个选择器的作用就是自动定位到目标项目最近一次完成的构建(不管构建结果是成功还是失败,只要不是被手动取消或仍在运行的状态)。
2. 替代你原有代码的正确写法
你原来的代码是通过手动获取上一次构建ID,再用specific()选择器复制产物:
def lastBuildId = currentBuild?.getPreviousBuild()?.getId() copyArtifacts(projectName: "${JOB_NAME}", selector: specific("${lastBuildId}") )
用lastCompleted()可以直接简化成:
copyArtifacts(projectName: "${JOB_NAME}", selector: lastCompleted())
而且这个写法更健壮:如果是项目的第一次构建,currentBuild?.getPreviousBuild()会返回null,你的原有代码会因为找不到构建ID报错;而lastCompleted()会自动检测这种情况,抛出清晰的错误提示(比如「No completed builds found for project...」),避免空指针问题。
3. 补充几个常用的同类型选择器
除了lastCompleted(),插件还提供了几个实用的选择器,能覆盖不同场景:
lastSuccessful():定位最近一次成功的构建(只复制成功构建的产物)lastStable():定位最近一次稳定的构建(通常指成功且没有警告的构建)lastFailed():定位最近一次失败的构建(适合调试失败场景)
内容的提问来源于stack exchange,提问作者Phoenix
相关产品推荐
相关产品推荐

