本教程包括:
- 创建一个简单的Python应用程序(使用Flask)。
- 为这个应用程序编写测试
- 添加
config.yml文件
持续集成(CI)涉及到在项目中的功能分支被合并到Git主分支之前的自动化测试。这可以确保代码库不会因为某些变化而被更新。另一方面,持续交付(CD)是在CI的基础上,对这些分支或主分支进行自动化发布。这使得小规模的增量更新能够更快地到达你的用户,符合敏捷软件开发理念。
在这篇文章中,我将带你了解GitHub的CI/CD流程。我们将使用一个Python应用程序来演示我们的CI管道。
我将带领你完成这些步骤。
- 创建一个简单的Python应用程序(使用Flask)
- 为这个应用程序创建测试
- 添加
config.yml文件 - 推送到GitHub
- 配置CircleCI
- 用徽章更新我们的
README - 创建一个PR,看看CircleCI的运行情况
前提条件
要跟上这个教程,需要一些东西。
创建一个简单的Python应用程序
为了创建我们的应用程序,我们将使用Flask,一个Python的微框架。在我们的练习中,对该框架的最小知识是必要的。
构建应用程序
首先,创建一个项目目录(文件夹)和cd 到其中。在终端键入这个内容。
mkdir python_app && cd $_/
接下来,打开你喜欢的编辑器,创建一个hello.py 文件。然后,将以下几行复制到该文件中。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
Python中的虚拟环境
在Python中工作时,强烈建议你使用虚拟环境。这允许你在一个抽象的环境中安装Python包,而不是你的整个本地机器。做到这一点的一些常见方法是使用 virtualenv或者,甚至更好。 virtualenvwrapper.我们将使用作为 Python3 的一部分的模块venv 。
创建虚拟环境。
python3 -m venv venv
你可以为你的虚拟环境使用其他名字,如下例所示。
python3 -m venv Env
激活环境。
source venv/bin/activate
如果你为环境使用了另一个名字,用这个名字替换venv 。你会注意到环境名称就在 shell 提示符之前,这告诉你虚拟环境已经激活。任何安装的 Python 包都将安装在这个环境中。要停用这个环境,只需运行。
deactivate
运行应用程序
现在是时候在你的编辑器中创建一个requirements.txt 文件了。在文件中添加Flask ,然后保存。
Flask
然后,在虚拟环境中,通过运行以下命令来安装该软件包。
pip install -r requirements.txt
运行这个应用程序的最终命令是。
FLASK_APP=hello.py flask run
在你的浏览器上进入http://localhost:5000/ ,查看该应用程序。
创建测试
在你的编辑器中,创建一个tests.py 文件,并将这些行粘贴到其中。
from hello import app
with app.test_client() as c:
response = c.get('/')
assert response.data == b'Hello World!'
assert response.status_code == 200
现在你可以运行测试了。打开终端并运行。
python3 tests.py
没有任何东西会被返回到你的终端。为什么? 我们构造了我们的Flask应用,所以它在通过时不会输出到终端。没有终端输出意味着你的测试是通过的。前面提到的资源提供了更详细的例子,说明终端如何处理通过和失败的测试。
创建一个CircleCI配置文件
创建一个.circleci 文件夹。在该文件夹中,创建一个 config.yml文件。然后,将这几行复制到其中。
version: 2.1
jobs:
build:
docker:
- image: cimg/python:3.10.1
steps:
- checkout
- restore_cache:
key: deps1-{{ .Branch }}-{{ checksum "requirements.txt" }}
- run:
command: |
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
- save_cache:
key: deps1-{{ .Branch }}-{{ checksum "requirements.txt" }}
paths:
- "venv"
- run:
name: Running tests
command: |
. venv/bin/activate
python3 tests.py
- store_artifacts:
path: test-reports/
destination: python_app
推送到GitHub
使用早期和经常提交代码的理念,我们会在这个过程中更早地初始化Git,并且我们会有原子提交。因为本教程是关于CircleCI和GitHub的集成,所以我故意把它搁置到现在。
目前的代码结构看起来是这样的。
.
├── .circleci
│ └── config.yml
├── hello.py
├── requirements.txt
└── tests.py
打开你的编辑器,在工作目录中创建一个.gitignore 文件。我们将用这个文件来说明哪些文件和文件夹不希望提交给Git。将以下几行复制到该文件中。
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# Virtualenv
venv/*
通过运行以下命令提交你的代码。
git add .
git commit -m "Initial commit"
如果你还没有GitHub账户,请到GitHub的主页上创建一个。如果你是GitHub的新手,你可能需要阅读关于推送项目到GitHub的教程。然后,到github.com/new 创建一个仓库。
我将使用python_app 这个名字,其余的默认设置保持不变,然后点击创建仓库的按钮。(如果不可见,请向下滚动)。

创建完你的新版本库后,你会进入一个类似这样的页面。

选择第二个选项,推送一个现有的版本库。运行。
git remote add origin git@github.com:NdagiStanley/python_app.git
git branch -M main
git push -u origin main
配置CircleCI
现在仓库已经在GitHub上,我们可以通过配置CircleCI来完成CI。前往CircleCI的注册页面。如果你还没有,用你的GitHub账户注册CircleCI。

登录后,确保你的个人GitHub账户是激活的。如果您在几个GitHub组织中,其中一个可能已经激活。只要点击下拉菜单(左上角),选择你的GitHub用户名。然后,点击添加项目。最近的项目,'python_app',就列在那里。

在包括我们项目的那一行的右边点击设置项目。
在重定向的页面上,你会注意到三个选项(Fastest、Faster和Fast),选择Fastest作为默认选项。我们将使用这个默认选项。注意其他两个选项的描述。
在GitHub分支的输入栏中输入main(注意该栏下面的文字,确认有.circleci/config.yml 文件),然后点击Set Up Project。

没过多久,构建就通过了。成功了!

重要的是,你要熟悉这个项目可以改变的设置。现在我将谈谈与我们有关的内容。
在右上角,点击项目设置(带有齿轮图标的按钮)。然后点击左边的高级。

找到Only build pull requests卡(如果你有必要,可以向下滚动)。默认情况下,它是关闭的。这意味着每个推送到GitHub的项目都会在CircleCI上运行,包括PR。如果你认为有必要,可以随时切换。有时,在一个大的团队环境中,建议这样做以缓和构建时间。
README - 状态徽章
在我们的本地机器上,通过运行检查出到另一个 Git 分支。
git checkout -b add_readme
打开你的编辑器,创建一个README.md 文件。复制并粘贴以下几行到这个文件中,相应地替换掉用户名NdagiStanley 。
# PYTHON APPLICATION
This Python application repo was created to showcase the integration between GitHub and CircleCI.
[](https://circleci.com/gh/NdagiStanley/python_app)
这样就增加了一个标题、一个简短的描述和一个状态徽章。
现在,运行以下命令。
git add .
git commit -m "Add README"
git push -u origin add_readme
如果你去看GitHub repo,https://github.com/<< username >>/python_app ,你会发现我们有一个新的分支:add_readme 。点击比较并拉动请求。

打开一个拉动请求
这是我设置PR的方法。
PR的标题是自动生成的,作为提交信息。我在描述中输入了以下内容,但这是可选的。
#### What does this PR do?
Adds README.md file and a CircleCI badge in it.
点击 "创建拉动请求",很快你就有了一个成功的构建!

注意,我点击了显示所有检查,以显示成功的检查是来自CircleCI。(现在它显示了隐藏所有检查的选项。)甚至浏览器的标签favicon也显示了成功运行的绿色勾。
如果你点击隐藏所有检查下面的细节,你将被重定向到CircleCI上的构建。

在顶部,点击python_app。你将被重定向到这个项目的构建。

总结
你已经拥有了它!我们已经把GitHub和CircleCI整合在一起了。
综上所述,我们建立了一个Python应用程序,并为其创建了测试。然后我们创建了一个CircleCI配置文件,并将代码库推送到GitHub。最后,我们把我们创建的GitHub仓库连接到CircleCI。
现在你可以在GitHub中设置自己的项目,并在CircleCI上配置CI构建。恭喜你开始了持续集成的实践!让你的团队其他成员参与进来,通过增加更多的应用程序、更多的测试和自动化部署来提高水平。