如果您正在尋找一種測試和部署您的 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. 最後,在您專案的根目錄上運行以下命令 commit
和 push
代碼(flask-circleci/config.yml) 到您的 GitHub 存儲庫。
啟用 CircleCI CI/CD Pipeline
您剛創建了 CircleCI CI/CD Pipeline,但現在它只是閒置在那裡並沒有做太多事情。您需要通過在 CircleCI 帳戶中設置項目來啟用您的 Pipeline。
1. 使用您的 GitHub 帳戶在網頁瀏覽器上登錄到您的 CircleCI 帳戶。
2. 接下來,在左側面板上點擊 Projects 標籤,然後在您的項目右側點擊 Set Up Project 按鈕來啟用該項目上的 CircleCI Pipeline。
由於您使用 GitHub 帳戶登錄到 CircleCI,您的項目將與 CircleCI 同步,就像下面的圖像一樣。

3. 返回到 Dashboard 標籤,您將看到 Success 狀態。 Success 狀態表示一切運行正常,圖像已被推送到您的 Docker Hub 存儲庫中。
點擊 build 以查看 Pipeline 中運行的所有步驟。

下面,您可以看到 CircleCI 執行 Pipeline 的步驟列表。

4. 最後,切換回您的 Docker Hub 存儲庫,您將看到通過 CircleCI Pipeline 推送到 Docker Hub 的圖像。

將更改推送到 GitHub 以觸發 CircleCI Pipeline
現在,您已經擁有一個運作中的 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/