如何用Groovy获取build_job的master分支成功构建编号?
解决Jenkins Groovy脚本筛选master分支成功构建编号的问题
嘿,作为Groovy新手能写出这样的脚本已经很棒啦!你现在的问题是没有对构建的分支做筛选,所以拿到了所有分支的成功构建记录。下面给你两种可行的修改方案,帮你精准获取master分支的构建编号:
方案一:通过Git插件的分支动作获取分支名
这个方法依赖Jenkins的Git插件,大部分用Git管理代码的Jenkins环境都会安装它:
import hudson.model.* import hudson.plugins.git.GitBranchAction def builds = [] def job = jenkins.model.Jenkins.instance.getItem("build_job") job.builds.each { build -> // 先判断构建结果是否为成功 if (build.getResult() == Result.SUCCESS) { // 获取当前构建关联的分支动作 def branchAction = build.getAction(GitBranchAction.class) if (branchAction != null) { def branchName = branchAction.getBranch().getName() // 只筛选master分支的构建 if (branchName == "master") { builds.add(build.displayName[1..-1]) } } } } // 去重并输出结果 builds.unique() println "master分支成功构建编号:${builds}"
代码说明:
- 导入
GitBranchAction类,用来从构建中提取分支信息 - 在判断构建成功后,先检查是否存在分支动作(避免非Git构建报错)
- 对比分支名是否为
master,符合条件才加入结果列表
方案二:通过构建环境变量获取分支名
如果你的Jenkins构建过程中会自动设置BRANCH_NAME环境变量(比如Pipeline或者Git插件默认配置),可以用更通用的方式:
import hudson.model.* def builds = [] def job = jenkins.model.Jenkins.instance.getItem("build_job") job.builds.each { build -> if (build.getResult() == Result.SUCCESS) { // 获取构建的环境变量 def env = build.getEnvironment(null) def branchName = env.get("BRANCH_NAME") // 确保分支名存在且为master if (branchName != null && branchName == "master") { builds.add(build.displayName[1..-1]) } } } builds.unique() println "master分支成功构建编号:${builds}"
额外小提示:
- 如果是在Jenkins Pipeline中运行脚本,可能需要调整脚本安全权限(比如在「脚本安全」中授权相关类)
- 如果你只需要最新的master分支成功构建,不需要遍历所有构建的话,可以用
job.getLastSuccessfulBuild()结合分支判断,效率会更高哦!
内容的提问来源于stack exchange,提问作者avi
相关产品推荐
相关产品推荐

