使用Jenkins流水线运行Docker容器并捕获输出

5
在Jenkinsfile中,如何运行Docker容器并捕获输出,而不需要返回到sh指令?
下面是我在Build阶段构建容器镜像的方法:
dockerImage = docker.build(env.DOCKER_COORDS, "--build-arg BUILD_VERSION=${env.BUILD_VERSION} .")

以下是我在稍后的 Publish 阶段如何推送该图像的方法:

withDockerRegistry(credentialsId: env.DOCKER_REG_CREDS_ID) {
    dockerImage.push('latest')
}

BuildPublish阶段之间,在一个Test阶段,我想验证容器的输出(通过传递--version参数)是否等于${env.BUILD_VERSION}

我该如何运行容器并捕获输出,而无需再次使用sh "docker ..."指令?

2个回答

2
我是新手,但根据Docker Pipeline插件的文档,你可以使用Image.run([args]),对于你的情况,它将是dockerImage.run() 传递环境变量的方法如下: dockerImage.run(['-e your_variable=X'])

那么我该如何获取输出呢? - Ernst de Haan
抱歉,我以为你需要确保某个特定的环境变量存在,而不是绝对要在输出中捕获它。 - Conscript

0
通常你可以使用sh方法(在Linux从机上)和bat方法(在Windows上)运行并捕获输出。例如,要检索官方Python Docker的Python版本,代码如下:
def version = sh label: '', returnStdout: true, script: 'docker run python python --version'

然后你可以将命令的输出与${env.BUILD_VERSION}进行比较。这应该与您的Docker镜像没有太大区别。


是的,我过去也曾这样做过。但现在我正在使用docker.build命令,而不是依赖于shell命令。因此,我想了解如何调用Docker容器,考虑到我使用的方法。 - Ernst de Haan
我已经更新了问题,明确表示不应使用“sh”。 - Ernst de Haan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接