我们使用jenkins
作为持续集成系统。我们有两个由jenkins
验证的django服务器。
jenkins
成功验证第一台服务器。第二台服务器依赖于第一台服务器。因此,我们希望在第一个服务器验证结束时启动第一个服务器本身。
我们正在使用python,virtualenv和django,并将Virtualenv Builder
定义如下:
pip install -r requirements.txt
rm -f .coverage
fab localhost test
coverage xml
nohup python manage.py runserver 9090 &
问题在于,由于nohup,构建永远不会结束。
如何在成功构建后启动服务器?
答案 0 :(得分:1)
我遇到了同样的问题。
肯,
我尝试使用fabric,但是再次使用python manage.py runserver - 连续运行,所以下一个命令没有启动。
就在几分钟之前,我的同事向我展示了如何使用 nohup 和Jenkins的变量 BUILD_ID ,这样就可以从构建中获得成功并离开Django服务器正在运行:
BUILD_ID = dontKillMe nohup python manage.py runserver host_server&
这适用于我们的Django项目测试。
答案 1 :(得分:0)
由于您正在使用 fabric 进行测试,我建议您定义另一个结构任务,例如部署,您可以调用它来假设建立成功。
就像fab
对成功构建的调用完成,以便您到达nohup
行,我希望部署任务也可以返回。
您可能还需要考虑将服务器设为服务(通过 /etc/init.d 样式脚本或 upstart 如果是Ubuntu),并让 fabric 任务停止当前正在运行的任务,请复制它需要的任何新文件(或类似的进程),然后重新启动它。
假设您拥有上面的 bash 脚本或类似内容,您可能还需要定义set -e
,以便在任何命令返回非成功代码的情况下,脚本将失败,反过来会使构建失败。