如果您正在寻找一种测试和部署您的 CircleCI Docker 镜像的方法,创建一个 CI/CD 流水线可以帮助您大大改善软件交付。
在本教程中,您将学习如何可能为您的 Docker 镜像使用 CircleCI 开发 CI/CD 流水线。
继续阅读并部署您的 Docker 镜像,前提是它们通过了测试!
先决条件
本教程将进行实践演示。如果您想跟着做,请确保您具备以下条件:
- A GitHub account and GitHub repository that is already set up.
- A CircleCI account linked to your GitHub account.
- A Linux machine – This tutorial uses Ubuntu 20.04.3 LTS.
创建基于 Python 的应用程序的 Docker 镜像
在开始创建 CI/CD 流水线之前,您将首先构建一个基于 Python 应用程序的 Docker 镜像,该应用程序在 Web 浏览器上显示文本。您将简要介绍应用程序的构建过程,编写应用程序的测试用例,然后将应用程序容器化。
1. 打开您的终端,并运行以下命令来安装
Flask 和 Pytest。Flask是一个用于在Python中构建Web应用程序的框架,而Pytest用于编写Python代码的测试。
2. 接下来,使用您喜欢的名称创建一个项目目录,但在本演示中,项目目录被称为flask-circleci
。这个目录是您将存储本教程资源的地方。
3. 创建一个名为flask-circleci/main.py的文件,并填入以下代码。
下面的代码在浏览器的主页上显示“欢迎来到我的Flask应用”文本。
4. 现在,创建另一个名为flask-circleci/test_main.py的文件,并复制/粘贴以下代码。
下面的代码为您的应用程序创建一个测试客户端。
Pytest要求您的测试文件名以test_开头,如下所示。
5. 运行以下命令以导航到您的项目目录(flask-circleci
),运行项目的测试。
如果测试成功,您将会得到100%的进度,如下所示。

6. 接下来,在根目录下创建一个文本文件(requirements.txt)来记录您的依赖关系,并填写下面的文本。构建Docker镜像时,此文件对于使其正常工作至关重要。
7. 最后,在flask-circleci/Dockerfile中创建一个新文件,并将下面的指令写入Dockerfile以构建您的Docker镜像。
Dockerfile中的指令执行以下操作:
- 在您的镜像中创建一个文件。
- 将当前目录中的所有文件复制到当前目录中的文件(flask-circleci)。
- 运行您的代码
创建 CircleCI CI/CD 流水线
现在您的 Docker 镜像已准备就绪,您将创建一个 CI/CD 流水线来测试您的代码,如果所有测试都通过,则将 Docker 镜像推送到 Docker Hub。Docker Hub 是一个类似于 GitHub 的服务,但专为 Docker 镜像而设计,帮助您在团队或其他开发人员之间找到并共享容器镜像。
要创建 CI/CD 流水线,请按照以下步骤操作:
1. 打开您喜欢的网络浏览器并登录到您的 Docker Hub 帐户。
2. 在 Docker Hub 主页上,点击 创建仓库 选项以在 Docker Hub 上创建一个仓库。

3. 为您的存储库设置一个唯一的名称。本教程使用一个名为circleci-tutorial的存储库,如下所示。

4. 在项目的根目录下创建一个新文件(flask-circleci/config.yml),并将下面的代码复制/粘贴到config.yml文件中。
以下代码获取一个现成的Python镜像,并使用它安装依赖项并运行单元测试,以构建并推送您的Docker镜像到您的存储库 Docker Hub。
通常,对于一个实际项目,您会希望将用户名和密码保护在CircleCI中,或者放在一个 .env 文件中。
5. 最后,在项目的根目录上运行以下命令将代码提交
并推送
到您的 GitHub 仓库。
激活CircleCI CI/CD流水线
您刚刚创建了CircleCI CI/CD流水线,但目前它只是静置在那里,没有做太多事情。您需要通过在CircleCI帐户中设置项目来激活您的流水线。
1. 使用您的GitHub帐户在Web浏览器上登录到您的CircleCI帐户
2. 接下来,在左侧面板上点击项目选项卡,然后在项目右侧点击设置项目按钮以激活项目上的CircleCI流水线。
由于您使用GitHub帐户登录到CircleCI,您的项目将与CircleCI同步,就像下面的图片中所示。

3. 返回仪表板选项卡,您将看到成功状态。成功状态表示一切都按预期运行,图像已推送到您的Docker Hub存储库。
单击构建以查看流水线中运行的所有步骤。

在下面,您可以看到CircleCI执行流水线所采取的步骤列表。

4. 最后,切换回到您的Docker Hub存储库,您将看到通过CircleCI流水线推送到Docker Hub的图像。

将更改推送到GitHub以触发CircleCI流水线
到现在,您已经有一个可工作的CircleCI流水线了。但也许您对项目进行了更改。如果是这样,您如何知道流水线仍然有效呢?您可以通过将更改推送到您的GitHub存储库来触发CircleCI,并查看测试是否成功。
1. 在您的本地计算机上,使用以下代码替换您在test_main.py中的代码。下面的代码故意确保测试失败,因为状态代码从200
更改为400
。
2. 接下来,使用以下代码替换config.yml中构建Docker镜像并将其推送到Docker Hub的steps
。
在下面的代码中,您只是更改版本以确保仅将新更改推送到您的GitHub存储库。
3. 在您项目的根目录下运行以下命令来commit
和push
代码到您的GitHub存储库。
4. 现在,转到您的CircleCI仪表板,您将看到构建失败,如下所示。
点击“构建”以查看推送更改所采取的步骤,并确认导致构建失败的原因。


5. 最后,导航到您的Docker Hub存储库,并确认更改未被推送。
如下图所示,v2未上传,因为测试失败了。

结论
通过本教程,您学会了如何编写测试,并将您的Python应用程序Docker化。您使用CircleCI创建了一个CI/CD流水线,该流水线运行应用程序的测试并将Docker镜像推送到Docker Hub。
到目前为止,您已经掌握了使用CircleCI开发CI/CD流水线的基础知识。现在,您打算如何运用这些新获得的知识呢?也许创建一个CI/CD流水线,将您的Docker镜像部署到Heroku?
Source:
https://adamtheautomator.com/circleci-docker-images/