我们有一个使用 Groovy DSL 的 Jenkins 构建系统,它对我们来说运行良好。
但后来我们最近聘请了一位据说非常优秀的新开发人员。他决定重写我们的测试工作方式。我们现在正试图让我们的构建过程适应他的新想法。我们有一个 Python 应用程序。以前,我们的构建系统是这样的:
git pull
运行测试
如果好,则推送到 ECR
简单的。
但他将所有测试都放到了一个单独的容器中。所以现在我需要做类似的事情:
‘docker build’主应用程序
‘docker run’ 主应用程序
‘docker build’ 测试应用程序
“docker run”测试应用程序(这将在主应用程序上触发 HTTP 请求)
从测试应用程序获取结果
关闭主应用程序
如果测试结果良好,则推送至 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
希望有所帮助。