如何通过Jenkins脚本控制台用Groovy获取声明式Pipeline中的label值

从Jenkins脚本控制台获取Pipeline声明的agent label值
以下是两种不同场景下可直接在Jenkins脚本控制台运行的Groovy脚本:
方式1:读取Pipeline任务配置中声明的静态agent label
如果需要直接读取Pipeline配置里写死的静态label值,使用下面的脚本,替换其中的任务路径参数即可:
// 替换为你的Pipeline任务的完整路径,如一级目录下的任务直接写任务名,多层目录写folder1/folder2/jobName def jobPath = "你的Pipeline任务全名" def job = Jenkins.instance.getItemByFullName(jobPath) if (job instanceof org.jenkinsci.plugins.workflow.job.WorkflowJob) { def pipelineScript = job.getDefinition().getScript() // 匹配agent块下的label声明规则 def matcher = (pipelineScript =~ /agent\s*\{\s*label\s*'([^']+)'/) if (matcher.find()) { println "获取到的label值:${matcher[0][1]}" } else { println "未匹配到静态声明的label" } } else { println "指定任务不是Pipeline类型" }
针对你提供的Pipeline示例,运行后会输出:获取到的label值:**se-installer-01.cec.lab.emc.com**
方式2:读取Pipeline某次运行时实际使用的节点label
如果Pipeline的label是动态传入的,或者需要获取某次构建实际调度的节点label,使用下面的脚本,替换任务路径和构建号参数即可:
// 替换为你的Pipeline任务的完整路径 def jobPath = "你的Pipeline任务全名" // 替换为你要查询的构建号 def buildNumber = 123 def build = Jenkins.instance.getItemByFullName(jobPath).getBuildByNumber(buildNumber) if (build) { def node = build.getBuiltOn() if (node) { println "本次构建实际使用节点的label:${node.getLabelString()}" println "本次构建实际调度的节点名称:${node.getDisplayName()}" } else { println "本次构建未绑定到具体节点" } } else { println "指定构建不存在" }
注意事项
- 运行脚本需要Jenkins管理员权限,脚本控制台默认仅对管理员开放
- 若Pipeline使用了
agent any或者动态参数传入label,方式1无法匹配到有效值,需使用方式2获取运行时实际值
内容的提问来源于stack exchange,提问作者Deepak Rohilla
相关产品推荐
相关产品推荐

