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

如何检查Jenkins Docker流水线withRun()方法运行的容器退出码?

Jenkins Docker插件withRun()检查容器退出码的方案

能否控制withRun()不让容器后台运行?

不能。withRun()方法的设计逻辑就是后台启动容器(自动添加-d参数),并在代码块执行完毕后自动停止、清理容器。它的定位是用于需要临时后台运行的容器(比如依赖服务),而非前台执行一次性任务的场景,因此没有提供禁用后台运行的参数。

检查容器退出码的惯用方式

如果希望保留withRun()的自动清理特性,同时检查容器退出码,可以通过以下方式实现:

方法1:利用容器对象的waitForFinish()获取退出码

在withRun()的代码块中,通过传入的容器对象调用waitForFinish()方法,等待容器执行完成并获取退出码,再判断是否非零来终止流水线:

pipeline {
  agent any
  options { timestamps()}

  stages {
    stage('Run Container with Exit Code Check') {
      steps {
        script {
          def img = 'controlled_exit:latest'
          def docker_image = docker.image(img)

          docker_image.withRun('-e EXIT_CODE=5', 'my_script') { container ->
              // 等待容器执行完成,获取退出码
              def exitCode = container.waitForFinish()
              if (exitCode != 0) {
                  error "容器执行失败,退出码: ${exitCode}"
              }
          }
        }
      }
    }
  }
}

方法2:改用run()方法前台运行(手动清理容器)

如果你的场景是执行一次性任务(比如脚本),run()方法更合适——它会前台运行容器,直接返回容器的退出码,流水线会自动根据退出码判断成功/失败。可以用try-finally块保证容器被清理:

pipeline {
  agent any
  options { timestamps()}

  stages {
    stage('Run Container with Exit Code Check') {
      steps {
        script {
          def img = 'controlled_exit:latest'
          def docker_image = docker.image(img)
          def container = null
          try {
              // 前台运行容器,返回容器对象
              container = docker_image.run('-e EXIT_CODE=5', 'my_script')
              // 等待容器完成并获取退出码
              def exitCode = container.waitFor()
              if (exitCode != 0) {
                  error "容器执行失败,退出码: ${exitCode}"
              }
          } finally {
              // 确保容器被清理,即使流水线失败
              if (container) {
                  container.stop()
                  container.remove()
              }
          }
        }
      }
    }
  }
}

补充:withRun()的适用场景

withRun()的核心优势是自动清理后台容器,适合需要临时启动服务(比如数据库、消息队列),并在后续步骤中依赖该服务的场景。如果是执行一次性脚本任务,run()配合手动清理的方式更直接,也能天然保证退出码被Jenkins捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:23:06