在 Jenkins 管道中,使用 Groovy DSL,如何在后台启动 Docker 镜像?

在 Jenkins 管道中,使用 Groovy DSL,如何在后台启动 Docker 镜像?

我们有一个使用 Groovy DSL 的 Jenkins 构建系统,它对我们来说运行良好。

但后来我们最近聘请了一位据说非常优秀的新开发人员。他决定重写我们的测试工作方式。我们现在正试图让我们的构建过程适应他的新想法。我们有一个 Python 应用程序。以前,我们的构建系统是这样的:

git pull

运行测试

如果好,则推送到 ECR

简单的。

但他将所有测试都放到了一个单独的容器中。所以现在我需要做类似的事情:

  1. ‘docker build’主应用程序

  2. ‘docker run’ 主应用程序

  3. ‘docker build’ 测试应用程序

  4. “docker run”测试应用程序(这将在主应用程序上触发 HTTP 请求)

  5. 从测试应用程序获取结果

  6. 关闭主应用程序

  7. 如果测试结果良好,则推送至 ECR

但是当我在主应用程序上调用“docker run”时,它就一直运行。这是一个 Python Web 应用程序 Django,使用 Gunicorn 来处理 Web 请求。

那么,我该怎么做呢?我是否应该在单独的线程中启动主应用程序,也许设置一个时间,让它在一定时间后自动终止?

答案1

您是否在运行时docker run -d ...使用了-d与容器分离的参数?这可能是问题所在吗?

编辑

我认为您会发现必须运行docker run -d才能与容器分离,否则它将停留在显示 STDOUT 的第一个容器上,直到 Jenkins 在停止作业时杀死该容器。我只需运行它们并给它们命名,然后在 Jenkins 作业结束时,停止并删除所有具有该名称的容器。

前任:

docker run -d --name jenkins-main-app main-app 
docker run -d --name jenkins-test-app test-app 

最后:

docker stop --name jenkins-main-app
docker stop --name jenkins-test-app
docker rm --name jenkins-main-app
docker rm --name jenkins-test-app

希望有所帮助。

相关内容