通过 Jenkins API 获取子项目构建

2023-11-22

我配置了一个 Jenkins 项目(我在这里称之为 SuperJob)来简单地按顺序调用几个不同的其他 jenkins 项目。

我希望能够通过 Jenkins API 找出该 SuperJob 特定构建号的所有子项目的结果

查看发布的代码HERE我能够从每个构建中获取 SuperJob 项目中配置的特定项目的列表,但是我无法找到一种方法来查询从 SuperJob 的特定构建运行的每个项目的特定构建号。

例如,我想知道“SuperJob build #5”触发了“MyJob build #3”和“OtherJob build #20”,这样我就可以汇总并检查所有结果。

我已经尝试了所有上游和下游 API,包括使用子项目作为关系项目的参数,但它们都返回空或 null。

我猜这是可能的,因为 Jenkins 本身能够在 Web ui 中显示来自插件的信息,但我无法找出如何实现。


我有同样的问题,目前我用来查找子构建的解决方案是通过解析每个构建的控制台日志。日志包含触发的作业名称和构建编号(完成后)。

import hudson.console.ConsoleNote;
jenkins = Jenkins.getInstance()
jobName = "root-job-name"     //just an example
buildNumber = 123             //just an example
job = jenkins.getItem(jobName)
startBuild = job.getBuildByNumber(buildNumber)

//scanning the tree using BFS
list = []
visitedList = []
q = list as java.util.Queue
q<<startBuild
visitedList.add(startBuild)
while (!q.empty){
   node = q.poll()

  subjobs = getTriggeredBuildssByBuild(node) //see method bellow
  subjobs.each{ subj ->
      if (!(subj in visitedList)){
          visitedList.add(subj)
          q<<subj
      }
  }
}

//printing results
visitedList.each{
    println "Job name and build number: ${it}"
}


//parsing the log of the Run object to get sub builds triggered by it
def getTriggeredBuildssByBuild(def run){
    list =[]
    if (run != null && ((reader = run.getLogReader()) != null)) {

        BufferedReader bufferedReader = new BufferedReader(reader);

        for (String line = bufferedReader.readLine();
            line != null;
            line = bufferedReader.readLine()) {

            //strip off jenkins specific encoding
            line = ConsoleNote.removeNotes(line);
            matcher = line=~/Finished Build : #(\d+) of Job : (.*) with/
            if(matcher){
               foundJob = matcher[0][2]
               foundBuildNum = Integer.parseInt(matcher[0][1])
               foundBuild=jenkins.getItem(foundJob).getBuildByNumber(foundBuildNum)
               list.add(foundBuild)
            }
        }
    }
return list
}

一些注意事项:

  1. 您需要检查我使用的正则表达式是否适合您的所有情况,当然您可以将其更改为检查其他一些正则表达式匹配的方法。
  2. 如果您使用多作业插件,并且您的所有作业都来自该类型,那么会更容易,因为 MultijobBuild 有一个 getSubBuilds() ,它可以准确返回您想要的内容。
  3. 我仍在寻找一种更好的方法来查找给定构建触发的子构建,特别是如果它可以返回所有状态(已完成或仍在构建)的构建。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Jenkins API 获取子项目构建 的相关文章

  • 使用 Groovy 从 Jenkins 主节点访问从节点上的文件

    我正在使用 Jenkins Build Flow 插件来实现并行化 Groovy DSL 执行某些文件操作 即使该选项Restrict where this project can be run设置为在特定从属设备上运行作业 DSL 在主控
  • 在 docker run 中发布 8080:80 和 8080:8080 有什么区别?

    我正在尝试运行詹金斯容器 我使用 docker run restart always name myjenkins p 8080 80 jenkins 但无法访问 jenkinshttp 本地主机 8080 http localhost 8
  • 合并 GitHub 中的拉取请求后,Jenkins 将不会触发构建

    到目前为止 在 Jenkins 中触发构建可以很好地创建新的拉取请求 推送更改并留下评论 例如test this please但是 当我在 GitHub 中点击绿色的 合并拉取请求 按钮时 我没有看到 Jenkins 中正在运行任何作业 我
  • TFS 门禁办理登机手续的缺点

    我一直使用 TFS 中的持续集成 CI 构建 然而 在我的上一个项目中 我们开始使用门控签入触发器 使用门禁办理登机手续有什么缺点吗 因为如果它阻止团队检查损坏的代码 那么 CI 触发器的目的是什么 门控签入是持续集成构建的一种形式 在TF
  • 无法连接到存储库:执行 git 命令时出错:git ls-remote -h ***public github url *** HEAD

    I have installed jenkins on ec2 instance when i try to configure my public github repo with the ec2 instance then it thr
  • 如何将 FTP 网站部署添加到 VS2015/TFS2013 构建过程中

    我已经成功构建运行 现在我想让构建定义将站点发布到我的暂存位置 我尝试使用在 Visual Studio 中正常运行的发布配置文件 但这似乎不适用于 Visual Studio 和 TFS 的这种独特组合 这些是我的 MSBuild 参数
  • 将 cron 作业配置为在 Jenkins 上每 15 分钟运行一次

    如何在 Jenkins 上每 15 分钟运行一次 cron 作业 这是我尝试过的 在 Jenkins 上 我使用以下 cron 语法设置了每 15 分钟运行一次的作业 14 但该作业每小时执行一次 而不是 15 分钟 我收到有关 cron
  • 为了使“我的更改”正常工作,Github 的正确 VCS 用户名设置是什么?

    我有一个适合个人的 TeamCity 持续构建流程设置GitHub项目 https github com benpowell HelloTxt NET效果很好 但是 在 TeamCity 中 我想在 我的更改 下查看提交列表 http te
  • 批准后使用 jenkinsfile 构建促销

    仅当更改管理使用 servicenow 更改票证或通过手动批准批准它时 我才需要使用 jenkins 文件将我的构建升级到生产 我想要类似的东西 产品构建只有在经理批准后才能手动触发 他 她应该收到带有批准 拒绝链接的批准邮件 或者 如果与
  • 已安装 cypress npm 软件包,但缺少 Cypress 二进制文件

    大家好 我是 azure devops CI 的新手 我正在尝试通过在作业之间缓存 node modules 来减少管道构建时间 但我遇到了无法解决的错误 我正在使用 cypress 进行测试 这是我的天蓝色管道 Node js Build
  • Tomcat:模块版本冲突。模块 [groovy-all 已在版本 2.3.7 中加载,而您正在尝试加载版本 2.4.3

    我有一个 jenkins 构建服务器来构建我的 grails 项目 我最近更新到 grails 2 5 0 和 groovy comiler 2 4 3 到目前为止 一切都很好 詹金斯再次发动战争 但是当我在 Tomcat 上部署战争时 出
  • Visual Studio Team Services 持续集成:NuGet 恢复任务失败

    我正在使用 Team Services 中的持续集成功能 以前是 Visual Studio Online 我的构建定义针对解决方案 而不是整个解决方案 中的特定项目 即 ClientUI MVC 网站 该解决方案包含三个项目 Client
  • 整合 Jenkins 电子邮件通知

    我有一个 Jenkins 项目 由 3 个简单的自由式作业组成 每个作业都有自己的构建从站 每个作业都与一个单独的平台相关联 linux mac 或 windows 当开发人员提交代码时 Jenkins 很快就会轮询存储库 在每个构建从属设
  • 在 Jenkins 中执行批处理文件

    我有一个简单的批处理文件 我想要从 Jenkins 调用 运行 执行该文件 Jenkins 中有同样的插件吗 如何从 Jenkins 执行批处理文件 如果有相同的教程或文档 无需为此添加新插件 在Jenkins 选择您的工作名称并转到配置部
  • 詹金斯上的登录类型选择有什么区别?

    我之前已经在一些机器上通过 war 文件和作为 Windows 服务安装的网页安装了 jenkins 现在我尝试通过 msi 文件将其安装在另一台计算机上 但我遇到了一个问题 在安装步骤中 有一个步骤询问我 登录类型 这给了我 2 个选择
  • 如何在 Jenkins 服务器上运行 Jest 测试

    我正在尝试运行我的Jest https facebook github io jest 在 Jenkins 部署期间进行测试 如果我 ssh 进入服务器 我可以 sudo 进入 Jenkins 用户并从工作区成功运行测试 但是 当我尝试从
  • 詹金斯没有运行任何作业

    我在尝试解决其他一些问题时成功地破坏了詹金斯 现在 每当我运行作业时 它都会立即失败并出现以下错误 java lang NullPointerException at java util TreeMap putAll TreeMap jav
  • 如何在 Jenkins 成功构建后触发参数化构建?

    我有三个管道项目 项目 a 项目 b 和项目 c 项目 c 采用一个参数 成功完成项目 a 或项目 b 后 我想使用参数触发项目 c 的构建 我可以在项目 a 和项目 b 中使用管道中的以下代码执行此操作 stage trigger pro
  • Jenkins:从神器部署战争文件

    我们正在使用Jenkins建立 maven 并部署工件 JAR 和 WAR s 到内部工件服务器 快照和版本 对于部署 目前 我们有 Jenkins 作业来打包 war 文件 来自发布 scm 标签 并部署到不同的环境 服务器 我们想要跳过
  • Jenkins GIT 包含从未构建过的区域

    我正在尝试使用包含区域在 Jenkins 中构建我的工作 但每当选中此选项时 民意调查结果总是说未检测到任何更改 我尝试了许多不同的路径 以及使用工作区进行 不进行强制轮询 结果是轮询从未检测到任何更改 但一旦我删除这些选项 它们就会在下一

随机推荐

  • 在 Neo4j 中,当粒度级别可以不受限制时,应该使用什么级别的特异性?

    使用图形数据库时最难理解的事情是选择粒度级别 假设我有一个图表 显示一周中某些日子发生的事情 垃圾日 周二炸玉米饼 周五自带酒水等 我可以将每一天设为一个节点 周一 周二 周三 这样 查询特定日期的速度很快 我可以创建一个名为 Day 的节
  • 通过 NativeActivity NDK 访问(更快的轮询)加速度计

    我已经搜索了有关使用 NDK 更快地轮询加速度计的教程 答案 但尚未找到求解器 刚刚找到了 androiddevelopers 文档here 我需要的是每秒大约 100 个样本 100Hz 的轮询加速度 默认情况下我的设备 带有姜饼 2 3
  • iOS8中如何在UIAlertController中添加UIDatePicker?

    我正在开发一个已经在 iOS 7 上发布的项目 但现在由于操作表出现问题 所以我现在正在实现 UIAlertController 以下是我用于通过 UIPicker 显示 UIAlertController 的代码 alertControl
  • 无法通过 Composer 安装包:缺少 PHP 扩展 zip

    我尝试在 Ubuntu PC 上使用 Composer 安装 laravel 安装程序 但在安装过程中出现此错误 您的要求无法解决为一组可安装的软件包 Problem 1 laravel installer v1 4 1 requires
  • 如何使用 C 在 Unix 上复制文件?

    我正在寻找 Win32 的 Unix 等效项CopyFile 我不想通过编写自己的版本来重新发明轮子 无需调用不可移植的 API 例如sendfile 或向外部公用事业提供资金 70 年代有效的方法现在仍然有效 include
  • 如何在 MongoDB 聚合中使用 $lookup 作为 INNER JOIN?

    我用过 lookup在我的聚合查询中 但正如我所见 它的工作原理是LEFT OUTER JOIN 我想获取完全匹配的文档 INNER JOIN lookup 有什么办法可以完成吗 这是我的inventory收藏 1 id 1 sku abc
  • 我想在运行时获取变量的类型

    我想在运行时获取变量的类型 我该怎么做呢 因此 严格来说 变量的类型 始终存在 并且可以作为类型参数传递 例如 val x 5 def f T v T v f x T is Int the type of x 但取决于你想要什么do
  • 使用 python nltk 查找两个网页之间的相似性?

    我想知道两个网页是否相似 有人可以建议带有 wordnet 相似性函数的 python nltk 是否有帮助以及如何帮助 在这种情况下使用的最佳相似度函数是什么 The spotsigs提到的论文乔伊塞斯坎解决了内容重复检测问题 其中包含大
  • Nuxt:如何防止nuxt-link转到另一个页面?

    我需要停下来nuxt link转到另一个页面 这是我的代码
  • Flask:当用户在执行长进程时关闭浏览器会发生什么?

    情况如下 我有一个应用程序 它使用 Angularjs 作为前端 使用 Flask 作为后端 我有一条看起来像这样的路线 app route api route1 methods POST def route1 result some pa
  • GUI/TUI Linux 库

    是否有任何 UI 库可以从同一源构建文本用户界面 ncurses 和图形用户界面 GTK QT 我知道 debconf 可以与各种前端一起使用 我想构建类似但可编程的东西 该库支持 YaST 独立性 使用一个代码库执行 ncurses gt
  • Rails 中列名的别名

    在我的数据库中有 删除 或 监听控制 等列名 这些无法更改 因此我想为这些名称起别名以避免我的应用程序出现问题 I found 下面的代码但它已经过时了 2005 年 8 月 5 日 并且不适用于 Rails 3 module Legacy
  • 奇数时选择最后一个子项,偶数时选择最后 2 个子项

    我所处的情况是显示的元素数量是可变的 我需要一个奇怪的解决方案 但我无法实现 我什至怀疑它是否只能通过 css 来实现 如果元素数量是奇数 我需要选择最后一个子元素 如果元素数量是偶数 我需要选择最后 2 个子元素 我一直在尝试nth la
  • Yq:检索对象键名称

    我有一个 YAML 文件 在我的例子中是 docker compose 文件 如下所示 networks foo some opts covfefe bar some opts such wow services apache image
  • 空 HTML href 会导致 IE 中列出目录

    我有一个带有单独 HTML 文件的网站 实际上是 shtml 但这对于这个问题来说并不重要 这些 shtml 文件包含一张图片以及一个前进和后退按钮 因此我可以切换回预览 shtml 文件或浏览到下一个文件 就像在画廊中一样 所有这些 sh
  • 私有字段的 Scala 名称修改和 JavaFX FXML 注入

    下面的例子和解释很长 所以这是我的问题的要点 当使用坚持执行字段注入 在真正应该保持私有的字段上 的框架时 如何处理scalac对私有字段的名称修改 我正在 Scala 中使用 ScalaFX JavaFX 和 FXML 编写一个应用程序
  • Bootstrap 4 导航栏垂直显示而不是水平显示

    我已经按照教程中的方式构建了一个导航栏 但不知何故 我的导航栏在应该水平显示时却垂直显示 关于如何解决这个问题有什么想法吗 提前致谢
  • CakePHP SwiftMailer SMTP TLS OpenSSL 错误 SSL3_GET_RECORD:版本号错误

    我正在尝试使用我在这里找到的 CakePHP SwiftMailer 组件发送电子邮件 http bakery cakephp org articles sky l3ppard 2009 11 07 updated swiftmailer
  • MongoDB 自定义序列化器实现

    我是 MongoDB 新手 正在尝试让 C 驱动程序序列化 F 类 我让它使用可变 F 字段和无参数构造函数与类自动映射器一起工作 但实际上我需要保留不变性 因此我开始考虑实现 IBsonSerializer 来执行自定义序列化 我还没有找
  • 通过 Jenkins API 获取子项目构建

    我配置了一个 Jenkins 项目 我在这里称之为 SuperJob 来简单地按顺序调用几个不同的其他 jenkins 项目 我希望能够通过 Jenkins API 找出该 SuperJob 特定构建号的所有子项目的结果 查看发布的代码HE