You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获Jenkins中docker.Image.run()运行容器的stdout标准输出

Jenkins中使用docker.Image.run()捕获容器stdout的实现方法

首先明确结论:Jenkins Docker 插件提供的原生docker.Image.run()方法本身没有直接返回stdout的设计,它的返回值是docker.Container类型的容器实例对象,仅包含容器ID等元数据。你可以通过以下两种官方支持的方式实现输出捕获:

方案1:利用容器实例的logs()方法获取输出

这是完全基于docker.Image.run()原生能力的实现方案,注意不要给启动参数加--rm,否则容器执行完成后会被立即删除,无法读取日志:

pipeline {
  agent any
  stages {
    stage("获取GitVersion输出") {
      steps {
        script {
          def img = docker.image("gittools/gitversion:5.6.6")
          // 启动容器,不要加--rm参数,返回容器实例
          def container = img.run('-v "$(pwd):/repo"', '/repo')
          // 阻塞等待容器执行完成
          container.waitFor()
          // 获取容器的stdout输出,trim()可以去除首尾换行符
          def gitversionJson = container.logs().trim()
          // 手动清理容器,避免节点残留无用容器
          container.remove()
          
          // 后续可以直接解析JSON使用
          def versionInfo = readJSON text: gitversionJson
          echo "当前版本号: ${versionInfo.FullSemVer}"
        }
      }
    }
  }
}

方案2:使用inside()方法更简洁地执行命令并捕获输出

如果不强制要求仅用run()方法,Docker插件提供的inside()方法更适合执行容器内命令并捕获输出,语法更简洁,无需手动管理容器生命周期:

script {
  def img = docker.image("gittools/gitversion:5.6.6")
  def gitversionJson = img.inside('-v "$(pwd):/repo"') {
    // 直接在容器内执行命令,通过sh步骤的returnStdout参数返回输出
    sh script: 'gitversion /repo', returnStdout: true
  }.trim()
}

注意:两种方案均基于Jenkins Docker插件的原生全局语法实现,无需手动拼接完整的docker run命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:36:03