介绍
部署和测试Python应用程序可能是一项繁琐的任务。在本文中,我们将看到如何使用GitHub Action在GitHub上部署Python应用程序。
我们将创建一个简单的Python应用程序,然后使用GitHub操作在GitHub上部署它。我们还将查看如何使用github操作测试应用程序。
什么是github行动?
GitHub Actions是一个平台,允许开发人员在存储库中自动化工作流程。它提供了一种创建可以由事件触发的自定义工作流程的方法,例如代码推送,拉请请求或发行版。通过GitHub操作,开发人员可以自动化任务,例如构建和测试代码,部署应用程序以及发送通知。
什么是CI/CD?
连续集成和连续部署(CI/CD)是一种软件工程实践,开发人员经常将其代码更改为中央存储库,然后自动构建,测试和部署。这样可以确保始终对代码更改进行测试和验证,并且部署的应用程序始终是最新的。
先决条件
- Python的基本知识
- git的基本知识
- github帐户
- render帐户
安装库
pip install flask pytest
为Python应用程序设置工作流程
1)创建烧瓶应用程序
创建一个新目录并创建一个名为__init__.py
的文件。
目录结构:
将以下代码添加到文件:
-
app\__init__.py
from flask import Flask
def create_app(config=None):
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
@app.route('/add/<int:num1>/<int:num2>')
def add(num1, num2):
return f"{num1} + {num2} = {num1 + num2}"
return app
-
wsgi.py
from app import create_app
if __name__ == '__main__':
app = create_app()
app.run()
现在使用以下命令运行应用程序:
python wsgi.py
创建一个tests
目录,并在其中创建一个名为__init__.py
和test_app.py
的文件。
我们需要为应用程序创建一些测试用例,这些测试用例将在GitHub操作工作流程中执行。
将以下代码添加到文件:
import unittest
from app import create_app
app = create_app()
class TestAddFunction(unittest.TestCase):
def test_addition(self):
with app.test_client() as client:
response = client.get('/add/4/5')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data.decode(), '4 + 5 = 9')
def test_missing_variable(self):
with app.test_client() as client:
response = client.get('/add/4/')
self.assertEqual(response.status_code, 404)
def test_invalid_variable(self):
with app.test_client() as client:
response = client.get('/add/4/foo')
self.assertEqual(response.status_code, 404)
现在使用以下命令运行测试用例:
python -m unittest discover -s tests
所有这些测试用例都应通过。
最后,我们需要创建一个requirements.txt
文件以安装依赖项。
我们唯一需要的库是flask
。因此,将以下行添加到文件:
flask
,您还可以添加其他依赖项。例如,如果要使用pytest
而不是unittest
,则可以将pytest
添加到requirements.txt
文件中。
您还可以使用以下命令自动生成此文件
pip freeze > requirements.txt
可以找到此应用程序的所有代码here。
2)创建一个GitHub存储库
- 在GitHub上创建一个新的存储库。
- 将代码推向存储库。
最后,我们有一个简单的python应用程序,要在github上部署。
我们不仅要部署应用程序,而且还想测试它。
3)创建一个工作流文件
转到“动作”选项卡,查找“ Python应用程序”。
查找“ Python应用程序”,然后单击“配置”
这将在.github/workflows
目录中创建一个工作流文件。
编辑此文件以自定义工作流程。
name: Python application
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with pytest
run: |
pytest
此工作流将在main
分支上的每个推送请求上运行。
它将安装依赖项并运行测试。
如果测试失败,工作流将失败。
这是一个非常简单的工作流程,但是可以自定义以执行更复杂的任务。
4)测试
- 创建一个新分支并对代码进行一些更改。
继续对代码进行一些更改。例如,您可以更改index
功能以返回“ Hello Blask!”而不是“ Hello World”。
@app.route('/')
def index():
return 'Hello Flask!'
- 创建拉动请求。
创建一个新的分支并将更改推向存储库。
git checkout -b new-branch
git add .
git commit -m "change index function"
git push origin new-branch
- 工作流将运行并将执行测试。
转到github并创建拉动请求。
合并拉的请求。
它将触发工作流程,并将执行测试。工作流成功执行。
打破工作流程,更改add
函数以返回错误的结果。
@app.route('/add/<int:num1>/<int:num2>')
def add(num1, num2):
return f"{num1} + {num2} = {num1 + num2 + 1}"
还有另一种破坏工作流程的方法。
导入不在requirements.txt
文件中的库。
import requests
这将导致工作流失败。
在渲染上部署应用程序
-
在渲染上创建一个新帐户。
-
将您的github帐户链接到渲染。
-
创建一个新的Web服务。
如果您与GitHub注册,您将看到您的存储库列表。
选择要部署的存储库。
- 选择GitHub存储库。
- 选择分支。
填写字段。
- 选择环境。
从列表中选择一个环境。
- 选择“开始命令”。 启动命令是应用程序启动时将执行的命令。 它是它创建烧瓶应用对象并运行它的烧瓶应用程序入口点。
如果您在root Directory中有Procfile
,则渲染将自动检测启动命令。
如果您没有Procfile
,则可以创建一个并添加开始命令。
将guincorn添加到requirements.txt
文件中。
web: gunicorn wsgi:app
这是CI/CD管道的CD部分。将更改推向存储库时,它将自动部署应用程序。
结论
总而言之,使用GitHub操作为Python应用程序设置CI/CD管道可以使您的开发过程更加顺畅,更有效。通过GitHub操作,您可以自动化测试,构建和部署应用程序的过程,从而节省时间和精力。设置管道后,您可以轻松地将更新推向应用程序,并自动构建和部署它们。另外,通过使用渲染来部署应用程序,您可以轻松地与其他人共享它,并使具有Internet连接的任何人都可以访问它。因此,如果您正在寻找一种简化Python应用程序的开发过程的方法,请尝试使用GitHub操作并尝试一下它们如何帮助您简化工作流程。Service.png)
- 选择GitHub存储库。
- 选择分支。
填写字段。
- 选择环境。
- 选择“开始命令”。 启动命令是应用程序启动时将执行的命令。 它是它创建烧瓶应用对象并运行它的烧瓶应用程序入口点。
如果您在root Directory中有Procfile
,则渲染将自动检测启动命令。
如果您没有Procfile
,则可以创建一个并添加开始命令。
将guincorn添加到requirements.txt
文件中。
web: gunicorn wsgi:app
这是CI/CD管道的CD部分。将更改推向存储库时,它将自动部署应用程序。
结论
总而言之,使用GitHub操作为Python应用程序设置CI/CD管道可以使您的开发过程更加顺畅,更有效。通过GitHub操作,您可以自动化测试,构建和部署应用程序的过程,从而节省时间和精力。设置管道后,您可以轻松地将更新推向应用程序,并自动构建和部署它们。另外,通过使用渲染来部署应用程序,您可以轻松地与其他人共享它,并使具有Internet连接的任何人都可以访问它。因此,如果您正在寻找一种简化Python应用程序的开发过程的方法,请尝试使用GitHub操作并尝试一下它们如何帮助您简化工作流程。