GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

CircleCIDockerイメージのCI/CDパイプラインを作成する方法

CircleCI Dockerイメージをテストしてデプロイする方法を探している場合は、CI / CDパイプラインを作成すると、ソフトウェア配信を改善するのに長い道のりが必要になります。

このチュートリアルでは、CircleCIを使用してDockerイメージのCI/CDパイプラインを開発する方法を学習します。

テストに合格した場合にのみ、Dockerイメージを読んでデプロイしてください!

前提条件

このチュートリアルは、実践的なデモンストレーションになります。フォローする場合は、次のものがあることを確認してください。

  • GitHub アカウントとGitHubリポジトリ すでに設定されています。
  • GitHubアカウントにリンクされたCircleCIアカウント。
  • DockerHubアカウント。
  • Dockerがインストールされています。
  • Linuxマシン–このチュートリアルでは Ubuntu20.04.3LTSを使用します。

PythonベースのアプリケーションのDockerイメージの作成

CI / CDパイプラインの作成にジャンプする前に、まずWebブラウザにテキストを表示するPythonアプリケーションに基づいてDockerイメージを作成します。アプリケーションの構築方法を簡単に説明し、アプリケーションのテストケースを作成してから、アプリケーションをコンテナ化します。

1.ターミナルを開き、次のコマンドを実行してinstallを実行します フラスコとPytest。 FlaskはPythonでWebアプリケーションを構築するために使用されるフレームワークであり、PytestはテストPythonコードを作成するために使用されます。

pip install flask pytest

2.次に、好みの名前でプロジェクトディレクトリを作成しますが、プロジェクトディレクトリの名前はflask-circleciです。 このデモでは。このディレクトリは、このチュートリアルのリソースを保存する場所です。

mkdir flask-circleci

3. flask-circleci / main.pyというファイルを作成します 次のコードを入力します。

以下のコードは、ブラウザのホームページに「Welcome tomyFlaskApp」というテキストを表示します。

from flask import Flask

app = Flask(__name__) #create an instance of the Flask class you just imported

@app.route('/')
def main():
    # display a string in the home page
    return "Welcome to my Flask App"

4.次に、 flask-circleci / test_main.pyという別のファイルを作成し、次のコードをコピーして貼り付けます。

以下のコードは、アプリケーションのテストクライアントを作成します。

Pytestでは、以下に示すように、テストファイルの名前がtest_で始まる必要があります。

from main import app

def test_main():
		# Creates a test client for this application.
    response = app.test_client().get('/') 

		# assert the stutus code of the page('/') is 200
    assert response.status_code == 200 
		# assert the return statement to the page
    assert response.data == b'Welcome to my Flask App' 

5.次のコマンドを実行して、プロジェクトディレクトリ(flask-circleci)に移動します。 )、プロジェクトのテストを実行します。

cd flask-circleci
pytest

テストが成功すると、以下に示すように、100%の進捗が得られます。

6.次に、テキストファイル( requirements.txt )を作成します )ルートディレクトリに依存関係を文書化し、以下のテキストを入力します。このファイルは、Dockerイメージをビルドして正しく機能するようにするために不可欠です。

Flask==2.0.3
pytest==6.2.5

7.最後に、新しいファイル( flask-circleci / Dockerfile)を作成します。 、以下の手順を Dockerfileに書き込みます。 Dockerイメージをビルドします。

Dockerfileの手順 次の手順を実行します:

  • 画像にファイルを作成します。
  • 現在のディレクトリ内のファイル内のすべてのファイルをコピーします( flask-circleci
  • コードを実行する
# set the Base Image from which your image will be built on
FROM python:3.8 
# create a directory called flask-circleci in root. 
# This directory will contain the code which currently resides in
RUN mkdir /flask-circleci

# make /flask-circleci the working directory
WORKDIR /flask-circleci

# copy your requirements file to the directory you just created
COPY requirements.txt /flask-circleci 

RUN pip install -r requirements.txt

# copy the current directory in you local machine to /flask-circleci in your image
ADD . /flask-circleci

EXPOSE 5000

CMD python main.py

CircleCI CI/CDパイプラインの作成

Dockerイメージの準備ができたら、コードをテストするためのCI / CDパイプラインを作成し、すべてのテストがDockerイメージに合格してDockerHubにプッシュされた場合。 Docker HubはGitHubのようなサービスですが、Dockerイメージの場合、コンテナーイメージを見つけて、チームや他の開発者と共有するのに役立ちます。

CI / CDパイプラインを作成するには、以下の手順に従います。

1.お気に入りのWebブラウザーを開き、DockerHubアカウントにログインします。

2. Docker Hubホームページで、リポジトリの作成をクリックします。 DockerHubにリポジトリを作成するオプション。

3.リポジトリに一意の名前を設定します。このチュートリアルでは、 circleci-tutorialというリポジトリを使用します 、以下に示すように。

4.新しいファイルを作成します( flask-circleci / config.yml) プロジェクトのルートで、以下のコードをコピーして config.ymlに貼り付けます ファイル。

以下のコードは、既製のPythonイメージを取得し、それを使用して依存関係をインストールし、単体テストを実行してDockerイメージをビルドしてリポジトリDockerHubにプッシュします。

通常、ライブプロジェクトの場合、ユーザー名とパスワードをCircleCI内、または.envファイルで保護する必要があります。

version: 2  # Version of CircleCI
jobs:
  build:
    docker:
      - image: python:3.8
    steps:
      - checkout

      - run:
        # creates a virtual environment for you project, 
				# install dependencies in it and run tests
          name: Run unit tests
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip install -r requirements.txt
            pytest
			# Creates a remote Docker environment configured to execute Docker commands.
      - setup_remote_docker 
       
      - run:
        # installs a docker client that will be used to run the docker commands
          name: Install Docker client
          command: |
            set -x
            VER="17.03.0-ce"
            curl -L -o /tmp/docker-$VER.tgz https://get.docker.com/builds/Linux/x86_64/docker-$VER.tgz
            tar -xz -C /tmp -f /tmp/docker-$VER.tgz
            mv /tmp/docker/* /usr/bin
      - run:
         # Builds a docker image to push to Docker Hub
				 # Tag (-t) pattern is below, where CircleCI 
				 # to get the Dockerfile from the current directory.
         # <docker_hub_username/docker-hub-password:version>.
          name: Build Docker image
          command: docker build -t khabdrick/circleci-tutorial:v1 .

      - run:
        # Pushes the Docker image you created to the Docker Hub.
        # Replace khabdrick/circleci-tutorial:v1 with the 
				# <docker_hub_username/docker-hub-password:version> you used to build the image above
          name: Push to Docker Hub
          command: |
            docker login -u unsername -p password
            docker push khabdrick/circleci-tutorial:v1

5.最後に、プロジェクトのルートで次のコマンドを実行して、commitを実行します およびpush コード( flask-circleci / config.yml )GitHubリポジトリに。

git add . # adds changes to staging area
git commit -m "update" # commits your changes
git push # Push to GitHub

CircleCI CI/CDパイプラインのアクティブ化

CircleCI CI / CDパイプラインを作成したばかりですが、現在はそこに座っているだけで、あまり機能していません。 CircleCIアカウントでプロジェクトを設定して、パイプラインをアクティブ化する必要があります。

1.WebブラウザのGitHubアカウントでCircleCIアカウントにログインします。

2.次に、プロジェクトをクリックします 左側のパネルのタブをクリックし、プロジェクトの設定をクリックします プロジェクトの右側にあるボタンをクリックして、プロジェクトのCircleCIパイプラインをアクティブにします。

GitHubアカウントでCircleCIにログインしたため、プロジェクトは下の画像のようにCircleCIと同期されます。

3.ダッシュボードに戻ります タブをクリックすると、成功が表示されます 状態。 成功 statusは、すべてが期待どおりに実行され、イメージがDockerHubリポジトリにプッシュされたことを示します。

ビルドをクリックして、パイプラインで実行されたすべてのステップを確認します。

以下に、CircleCIがパイプラインを実行するために実行した手順のリストを示します。

4.最後に、Docker Hubリポジトリに戻ると、CircleCIパイプラインを介してDockerHubにプッシュしたイメージが表示されます。

CircleCIパイプラインをトリガーするためにGitHubに変更をプッシュする

これで、CircleCIパイプラインがすでに機能しています。しかし、おそらくあなたはあなたのプロジェクトに変更を加えました。もしそうなら、パイプラインがまだ機能していることをどうやって知ることができますか?変更をGitHubリポジトリにプッシュして、CircleCIをトリガーし、テストが成功するかどうかを確認できます。

1.ローカルマシンで、 test_main.pyにあるコードを置き換えます 以下のコードで。以下のコードは、ステータスコードが200から変更されたため、意図的にテストが失敗することを保証します。 400へ 。

from main import app

def test_main():
		# Creates a test client for this application.
    response = app.test_client().get('/') 

		# assert the status code of the page('/') is 400 when it isn't, 
		# causing the test to fail.
    assert response.status_code == 400 
		# assert the return statement ton the page
    assert response.data == b'Flask App' 

2.次に、stepsを置き換えます config.yml内 これにより、Dockerイメージがビルドされ、以下のコードを使用してDockerHubにプッシュされます。

以下のコードでは、バージョンを変更するだけで、新しい変更のみがGitHubリポジトリにプッシュされるようになっています。

      - run:
          name: Build Docker image
          command: docker build -t khabdrick/circleci-tutorial:v2 .

      - run:
          name: Push to DockerHub
          command: |
            docker login -u khabdrick -p Muhammed-1998
            docker push khabdrick/circleci-tutorial:v2

3.プロジェクトのルートで次のコマンドを実行してcommit およびpush GitHubリポジトリへのコード。

git add . # adds changes to staging area
git commit -m "v2" # commits your changes
git push # Push to GitHub

4.次に、CircleCIダッシュボードに移動すると、ビルドが失敗であることがわかります。 、以下に示すように。

ビルドをクリックして、変更をプッシュするために実行した手順を確認し、ビルドが失敗した原因を確認します。

5.最後に、Docker Hubリポジトリに移動して、変更がプッシュされていないことを確認します。

下の画像でわかるように、テストが失敗したため、v2はアップロードされませんでした。

結論

このチュートリアルを通じて、テストの作成方法とPythonアプリケーションのDocker化の方法を学びました。アプリケーションのテストを実行し、DockerイメージをDockerHubにプッシュするCircleCIを使用してCI/CDパイプラインを作成しました。

この時点で、CircleCIを使用してCI/CDパイプラインを開発するための基礎知識がすでにあります。では、この新しく発見された知識をどのように使用するつもりですか?おそらく、DockerイメージをHerokuにデプロイするCI / CDパイプラインを作成しますか?


Docker
  1. ホストディレクトリをDockerコンテナにマウントする方法

  2. テスト用の MySQL Docker コンテナを作成する方法

  3. ディレクトリへのリンクを作成する方法

  1. Linuxですべてのユーザーの共有ディレクトリを作成する方法

  2. ホスト間でDockerイメージを移動する方法

  3. Dockerイメージを他の人と共有する方法

  1. Dockerの学習:Dockerコンテナを作成する方法

  2. Dockerイメージを変更する方法

  3. Mac 上の docker で maven を実行するために、docker イメージを .m2 ディレクトリにポイントするにはどうすればよいですか?