使用 Flask 构建 Web 应用
Flask
是 Python
中最流行的 Web 框架之一,以小巧、灵活、可扩展性强著称。相比 Django
,它给了开发者在 Web 应用开发过程中更大限度的自由。本文将通过一个简单的 Demo 项目,演示如何在持续集成中快速集成 Python
+ Flask
项目。
应用构建完成后还能够自动打包为 Docker 镜像并推送至制品仓库中,方便其他团队成员进行拉取,二次构建。
前置准备
-
示例项目中的目录结构与各文件的功能解释:
python-flask-demo ├── .gitignore ├── Dockerfile ├── Jenkinsfile ├── README.rst ├── app.py └── requirements.txt 0 directories, 5 files
.gitignore
可以在内声明一些不需要加入到
Git
管理的文件或文件夹,这样就不用每次提交代码的时候再特地处理这些文件了。Dockerfile
Dockerfile
就是我们用来构建 Docker 镜像的源码,Docker 可以读取里面的指令来自动构建镜像。Jenkinsfile:
Jenkinsfile
是一个文本文件,它定义了 Jenkins 流水线,将作为配置文件检入至源代码控制仓库中。README.rst
由开发者写给其他人阅读的一个文本文件,描述了这是个什么样的项目,有什么用,如何安装和使用等。
app.py
包含
main
函数的主要程序代码文件。requirements.txt
requirements.txt
可以保证项目依赖包版本的确定性, 不会因为依赖更新而导致异常产生,通常可以由pip
包管理工具生成。
初始化项目
将示例项目导入至 CODING 代码仓库中,在新建代码仓库时选择「导入外部仓库」,填入开源仓库地址。
将项目拉取至本地后,输入以下命令安装依赖:
pip install -r requirements.txt
在本地启用预览:
python app.py
当终端返回以下数据后,意味着项目已构建成功。
在浏览器中输入 http://127.0.0.1:5000/
进行预览。
编译与构建
编译(Compiling) 就是将源代码文件通过编译器转换为目标文件的过程,是构建(Building) 的一个部分,构建还包括连接与测试环节。
为什么需要编译/构建?
我们开发时所写的源代码,都是写给人看的,机器并不理解其意。而若想在计算机上运行一个应用程序,则必须将该程序由 源代码 转换成计算机所能理解的 二进制机器码。为此,我们需要将程序编译成可执行文件,通过构建来执行更加工程化、结构化、严谨的一系列步骤,并将产出的 制品 部署上生产环境。
在将我们开发的程序给他人使用时,他人的系统中可能并没有安装 Python
环境或没有安装第三方库,这个时候如果要求对方去装环境并不太现实,会特别不方便,特别是当对方不是个技术人员的时候。这个时候如果我们将开发好的程序编译打包成一个可执行文件,那么一切就会变得简单起来。
如何编译/构建?
在进行编程操作的时候,我们常常会遇到很多与编程无关的项目管理工作,如下载依赖、编译源码、单元测试、项目部署 等操作。一般的,小型项目我们可以手动实现这些操作,然而大型项目这些工作则相对复杂。构建工具 是帮助我们实现一系列项目管理、测试和部署操作的工具。同时,它能大大提升我们的效率。
本文所使用的的项目为 Python
项目,我们将通过 PyInstaller 工具进行编译打包。PyInstaller
自身支持跨平台,并且自身基础操作十分简单、易上手。你可以在工具官网进行下载,macOS 用户可以直接使用 brew install PyInstaller
命令直接安装。
安装完成后,进入项目地址,因只有一个 app.py
源代码文件,所以这里使用 -F
Flag 命令编译生成单个可执行文件。
pyinstaller -F app.py
运行命令,在产生了许多编译日志之后,在项目下生成了两个新目录:build
和 dist
:
这里我们可以看到 dist
目录下生成了一个可执行程序 app
。这就是我们这次编译所得到的主要制品了。打开此制品后,即可在 5000 端口运行相同的服务。
为什么需要持续集成?
在上述操作中,存在着一些完全可以抽离出来自动化的步骤。比如我们每次写完代码,在提交前要进行编译、单元测试,而这些步骤的操作可能大致相同,那么我们是不是可以把这些步骤交给某个自动化的工具来完成呢?甚至你可能已经写好了编译、测试的脚本,只需要运行一下即可,那么我们甚至可以把这个运行脚本的步骤也抽离出去。
通过持续集成,能够实现在代码自动提交至远端后,自动进入编译、测试、发布流程。如果在此期间发现代码有问题,CODING 持续集成还能够通过多种进行形式通知,及时暴露错误并加以改正,而不是等合进 master
分支后才发现问题。
接下来我将演示如何使用持续集成将上述项目进行编译与测试。
创建构建计划
进入项目后,点击进入左侧的「持续集成」功能,选择「Python + Flask + Docker」模板。
选择需要导出目标制品库。
你还可以根据自身情况,修改持续集成的 触发规则、变量与缓存 以及 通知提醒 等。在触发规则中还可以配置自动监听代码分支,自动触发持续集成。
开始构建
我们返回至 持续集成 -> 构建 页面,此时可以看到我们刚新建的 构建计划。触发后可以在「构建过程」中查看整体的构建过程与状态。
在制品仓库中可以看到已上传的镜像。
结语
通过持续集成 + 制品仓库的搭配使用,能够轻松地将应用打包发布,用以加速开发流程。
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。