使用Jenkins部署并执行python Flask应用程序

7vhp5slm  于 2022-11-21  发布在  Python
关注(0)|答案(2)|浏览(314)

我尝试使用Jenkins自动部署Python Flask应用程序,然后在Raspberry Pi服务器上使用shell命令运行它。
以下是一些背景信息
在使用Jenkins之前,我的部署和执行过程是手动的,如下所述:

  1. 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
  2. Jenkins自动从github中拉取
  3. 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”的资料。这些工具中有没有对我现在的情况有帮助的,我应该采取哪种方法?
ltqd579y

ltqd579y1#

简单而健壮的解决方案(在我看来)是使用Supervisor,它在Debian中以supervisor包的形式提供。它允许你从脚本中创建一个守护进程,就像你的应用程序一样,它可以产生多个进程,观察应用程序是否崩溃,如果崩溃了,它可以重新启动它。
注意virtualenv-你不需要激活venv来使用它。你只需要指向合适的Python可执行文件(your_venv/bin/python)而不是默认的文件。例如:

$ ./venv/bin/python myFlaskApp.py
fdbelqdn

fdbelqdn2#

您需要创建这些文件以便通过jenkins进行部署。

可找到代码:https://github.com/ishwar6/django_ci_cd

1.这将对 flask 和django都有效。

  1. initial-setup.sh-这个文件是在建立这个项目时要看的第一个文件。它安装了使这个项目工作所需的软件包,如Nginx,Jenkins,Python等。参考youtube视频,了解如何以及何时使用它。
  2. Jenkinsfile -这个文件包含了管道中各个阶段的定义。这个项目管道中的阶段是设置Python虚拟环境、设置gunicorn服务和设置Nginx。这个管道中的阶段只做两件事。首先,它使一个文件成为可执行文件,然后运行该文件。该文件执行阶段描述中描述的命令。
  3. envsetup.sh-这个文件设置python虚拟环境,安装python包,然后创建Nginx将使用的日志文件。
  4. gunicorn.sh-这个文件运行一些Django管理命令,比如迁移命令和静态文件收集命令。它还设置了gunicorn服务,该服务将在后台运行gunicorn服务器。
  5. nginx.sh-这个文件用一个配置文件来设置Nginx,这个配置文件将Nginx指向运行我们的应用程序的gunicorn服务。这允许Nginx服务于我们的应用程序。我已经看了一篇数字海洋的文章来设置这个文件。你可以浏览一遍视频来复制站点可用和站点启用的scanerio。
    1.这是一个Nginx服务器配置文件。这个文件用来设置Nginx作为gunicorn的代理服务器。要使这个配置生效,请将server_name的值更改为您服务器的IP地址或域名。

相关问题