如何在Jenkins日志中获取Docker容器的标准输出

117次阅读
没有评论

问题描述

在Jenkins的流水线中运行一个Docker容器,使用Jenkins的docker.withRun()方法。用户希望在Jenkins的日志中包含Docker容器的标准输出,但目前并没有显示出来。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你可以在Jenkins的流水线中使用docker.run()方法来运行Docker容器,并将其设置为交互模式。这样可以将Docker容器的标准输出包含在Jenkins的日志中。
以下是一个示例的Jenkins流水线代码:

pipeline {
  agent any
  options {
    timestamps{}
  }
  stages {
    stage('docker run') {
      steps {
        script {
          def img = 'tmp'
          def docker_run_args = '-e STR=foo'
          sh "docker run --rm -it ${docker_run_args} ${img}"
        }
      }
    }
  }
}

在上面的示例中,我们使用docker.run()方法来运行Docker容器,并将其设置为交互模式(使用-it参数)。这样可以将Docker容器的标准输出包含在Jenkins的日志中。
请注意,我们还使用了--rm参数来在容器完成后删除容器。这样可以确保每次运行流水线时都使用一个新的容器。

方案2

使用docker.withRun()方法运行Docker容器时,默认是以后台模式运行的,无法将标准输出包含在Jenkins的日志中。你可以尝试使用docker.run()方法,并将其设置为交互模式来解决这个问题。
以下是一个示例的Jenkins流水线代码:

pipeline {
  agent any
  options {
    timestamps{}
  }
  stages {
    stage('docker run') {
      steps {
        script {
          def img = 'tmp'
          def docker_run_args = '-e STR=foo'
          def ms = docker.image(img)
          ms.run(docker_run_args)
        }
      }
    }
  }
}

在上面的示例中,我们使用docker.run()方法来运行Docker容器,并将其设置为交互模式(使用-i参数)。这样可以将Docker容器的标准输出包含在Jenkins的日志中。
请注意,我们没有使用--rm参数,因此容器将保留在运行后台。如果你希望在每次运行流水线时都使用一个新的容器,请添加--rm参数。

方案3

如果你只是想查看容器的标准输出,而不需要将其包含在Jenkins的日志中,你可以使用docker logs命令来查看容器的标准输出。
以下是一个示例的Jenkins流水线代码:

pipeline {
  agent any
  options {
    timestamps{}
  }
  stages {
    stage('docker run') {
      steps {
        script {
          def img = 'tmp'
          def docker_run_args = '-e STR=foo'
          sh "docker run --rm ${docker_run_args} ${img}"
        }
      }
    }
  }
}

在上面的示例中,我们使用docker run命令来运行Docker容器,并使用--rm参数在容器完成后删除容器。然后,我们使用docker logs命令来查看容器的标准输出。
请注意,这种方法不会将容器的标准输出包含在Jenkins的日志中,而是在Jenkins的控制台输出中显示容器的标准输出。

正文完