Python Flask项目在Gitlab CI中自动打包Docker镜像

Python054

Python Flask项目在Gitlab CI中自动打包Docker镜像,第1张

第一步,在Gitlab中新建一个项目

第二步,克隆支本地

第三步,本地调通Python Flask项目

用VSCode打开该项目,先用flask在app.py下写了一个hello world:

然后在index.html中写下hello world,放在templates目录下:

安装flask依赖

用以下命令进行本地运行

打开浏览器进入localhost:5000即可看到Hello World

本地调试成功

第四步,本地调通Docker打包与容器运行

于是尝试利用docker打包成镜像,由于该项目依赖flask库,所以在根目录添加了requirements.txt文件,里面标明了依赖库以及相应的版本

然后编写好了Dockerfile

运行命令开始打包:

打包成功,运行容器:

在浏览器浏览localhost没有响应

查看日志发现没有报错

再尝试用浏览器打开127.0.0.1,也不行

网上搜索发现python flask在服务器不能直接运行,需要借助gunicorn

于是编写了配置文件gunicorn.conf.py:

同时修改了Dockerfile:

以及修改了依赖包requirements.txt:

再打包镜像、运行容器,发现可以正常运作了:

第五步,Gitlab CI设置脚本自动打包Docker镜像

由于自建Docker镜像仓库和账号是隐私信息,因此使用Gitlab CI变量代替,再在项目CI/CD设置内赋值

步骤:

1、使用此文程序编译python源程序为pyd

链接: https://www.jianshu.com/p/4465cf9283b6

2、编写入口py文件,调用pyd模块

注意点:

1、由于pyinstaller不会导入pyd程序依赖包,所以需要将pyd程序依赖包在入口py文件中导入一次,避免打包exe时pyd无法使用

2、打包exe后,路径有所变化,pyd中路径需使用绝对路径

3、pyd文件不要写入口调用,if main等,在入口py文件中导包及调用相关函数

优点:脱离python环境,包依赖

缺点:文件较大

步骤:

1、将入口py文件打包为exe可执行程序,会自动导入pyd文件并进行封装

注意点:

1、打包exe后,cmd下运行程序,看是否有错误输出,按提示解决相应问题即可

上一篇文章介绍了gradle多渠道打包,但是在实际的工作中可能会遇到,发布渠道不同,发布的包的内容也不同的情况。例如我之前做的项目,发布360市场的包可以在程序中添加广告,但是发布到小米市场的却不允许添加广告。遇到这种情况只能切分支开发(如果你不是用git做项目管理,呵呵哒,对不起了)。切分支开发之后,如果还使用上一篇文章中的多渠道打包方式就只能一个一个分支的打包了。虽然也很简单,切换分支,输入打包命令,等待,打包完成之后,切换分支,输入打包命令...... 但是懒惰是人类文明进步的真正动力。能否输入一个命令之后,自动打包,自动切换分支......答案是可以的。