我尝试使用Jenkins自动部署Python Flask应用程序,然后在Raspberry Pi服务器上使用shell命令运行它。
以下是一些背景信息,
在使用Jenkins之前,我的部署和执行过程是手动的,如下所述:
- FTP到Python脚本和Python venv所在的目录
1.使用FTP替换Flask应用程序脚本
1.通过Raspberry Pi上的终端(“./venv/bin/activate”)激活Python(3.5)的虚拟环境
1.通过myFlaskApp.py在终端中执行“python myFlaskApp.py”运行www.example.com
现在,我已经将Jenkins与下面描述的部署/执行过程集成在一起:
1.将代码更改推送到github - Jenkins自动从github中拉取
- Jenkins通过执行shell命令将文件部署到指定目录
1.然后,Jenkins激活虚拟环境,并myFlaskApp.py通过在shell终端中运行一个.sh脚本来运行www.example.com。
现在问题,我有在步骤4,因为一个 flask 应用程序必须始终是活的,我的Jenkins永远不会“完成建设成功”,它将始终处于加载状态,因为 flask 应用程序是运行在 shell 终端Jenkins正在使用。
现在我的问题是为了myFlaskApp.py在部署文件后使用Jenkins激活www.example.com,同时不使其被构建过程“锁定”,我应该采取什么正确的方法?
我已经阅读了关于Docker、SubShell和Linux实用程序“Screen”的资料。这些工具中有没有对我现在的情况有帮助的,我应该采取哪种方法?
2条答案
按热度按时间ltqd579y1#
简单而健壮的解决方案(在我看来)是使用Supervisor,它在Debian中以
supervisor
包的形式提供。它允许你从脚本中创建一个守护进程,就像你的应用程序一样,它可以产生多个进程,观察应用程序是否崩溃,如果崩溃了,它可以重新启动它。注意
virtualenv
-你不需要激活venv来使用它。你只需要指向合适的Python可执行文件(your_venv/bin/python
)而不是默认的文件。例如:fdbelqdn2#
您需要创建这些文件以便通过jenkins进行部署。
可找到代码:https://github.com/ishwar6/django_ci_cd
1.这将对 flask 和django都有效。
1.这是一个Nginx服务器配置文件。这个文件用来设置Nginx作为gunicorn的代理服务器。要使这个配置生效,请将server_name的值更改为您服务器的IP地址或域名。