CircleCIのDockerイメージをテストおよびデプロイする方法を探している場合、CI/CDパイプラインを作成することで、ソフトウェアの提供を改善するために大いに役立ちます。
このチュートリアルでは、CircleCIを使用してDockerイメージのCI/CDパイプラインを開発する方法について学びます。
続けて読んで、テストをパスした場合にのみDockerイメージをデプロイしましょう!
前提条件
このチュートリアルは実践的なデモンストレーションです。一緒に進める場合は、次のものが必要です:
- A GitHub account and GitHub repository that is already set up.
- A CircleCI account linked to your GitHub account.
- Dockerがインストールされていること。
- A Linux machine – This tutorial uses Ubuntu 20.04.3 LTS.
PythonベースのアプリケーションのDockerイメージの作成
CI/CDパイプラインの作成に入る前に、まずWebブラウザ上でテキストを表示するPythonアプリケーションをベースにしたDockerイメージを作成します。アプリケーションのビルド方法を簡単に説明し、アプリケーションのテストケースを作成し、アプリケーションをコンテナ化します。
1. ターミナルを開き、以下のコマンドを実行して、Flask
とPytest
をinstall
してください。 FlaskはPythonでWebアプリケーションを構築するためのフレームワークで、PytestはPythonコードのテストに使用されます。
2. 次に、プロジェクトディレクトリを好きな名前で作成しますが、このデモではプロジェクトディレクトリをflask-circleci
と呼びます。このディレクトリにはこのチュートリアルのリソースを保存します。
3. flask-circleci/main.pyというファイルを作成し、以下のコードを記入します。
以下のコードは、ブラウザのホームページに「Welcome to my Flask App」と表示されます。
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 パイプラインを作成しましたが、現時点ではそれがただそこにあってそれほど活動していません。CircleCI アカウントでプロジェクトを設定して、パイプラインをアクティブにする必要があります。
1. ウェブブラウザーでGitHub アカウントで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. 次に、Dockerイメージを構築してDocker Hubにプッシュするconfig.ymlのsteps
を以下のコードで置き換えます。
以下のコードでは、バージョンを変更して、新しい変更のみがGitHubリポジトリにプッシュされるようにしています。
3. プロジェクトのルートで次のコマンドを実行して、コードをGitHubリポジトリにcommit
してpush
します。
4. そして、CircleCIダッシュボードに移動すると、以下のようにビルドがFailedと表示されます。
ビルドをクリックして、変更が行われたステップを表示し、ビルドが失敗した原因を確認してください。


5. 最後に、Docker Hub リポジトリに移動し、変更がプッシュされていないことを確認してください。
以下の画像でわかるように、テストが失敗したため、v2 はアップロードされませんでした。

結論
このチュートリアルでは、テストの書き方と Python アプリケーションの Docker 化方法を学びました。CircleCI を使用してアプリケーションのテストを実行し、Docker イメージを Docker Hub にプッシュする CI/CD パイプラインを作成しました。
この時点で、CircleCI を使用した CI/CD パイプラインの基礎知識をすでに持っています。では、この新しい知識をどのように活用する予定ですか?おそらく、Docker イメージを Heroku にデプロイする CI/CD パイプラインを作成するでしょうか?
Source:
https://adamtheautomator.com/circleci-docker-images/