CircleCI での Python アプリケーションの構成

ここでは、Python で記述されたサンプル アプリケーションを参考に、CircleCI を構成する方法について説明します。

概要

このガイドでは、Django サンプル アプリケーションを使用しながら、CircleCI 上で Python アプリケーションをビルドする場合の構成のベスト プラクティスについて説明します。 このアプリケーションは GitHub 上でホスティングされ、CircleCI 上でビルドされます。

このガイドに沿って、リポジトリをフォークし、設定ファイルを記述してみることをお勧めします。

設定ファイルの詳細

すべての CircleCI プロジェクトには、.circleci/config.yml という設定ファイルが必要です。 以下の手順に従って、完全な config.yml ファイルを作成してください。

バージョンの指定

config.yml は必ず version キーから始めます。 このキーは、互換性を損なう変更に関する警告を表示するために使用します。

version: 2

ビルド ジョブの作成

実行処理は 1 つ以上のジョブで構成されます。 この実行では ワークフローを使用しないため、build ジョブを記述する必要があります。

working_directory キーを使用して、ジョブの steps を実行する場所を指定します。 working_directory のデフォルトの値は ~/project です (project は文字列リテラル)。

version: 2
jobs:
  build:  # ワークフローを使用しない実行に必要です
    working_directory: ~/circleci-demo-python-django

Executor タイプの選択

ジョブのコンテナを選択したら、いくつかのコマンドを実行する steps を作成します。

ジョブの各ステップは Executor という仮想環境で実行されます。

この例では docker Executor を使用して、カスタム Docker イメージを指定しています。 最初に記述したイメージが、ジョブのプライマリ コンテナになります。 ジョブのすべてのコマンドがこのコンテナで実行されます。

version: 2
jobs:
  build:
    working_directory: ~/circleci-demo-python-django
    docker:
      - image: circleci/python:3.6.4  # ビルド ジョブのプライマリ コンテナ

メモ: circleci/python:3.6.4 は、CircleCI が提供する CircleCI イメージです。 これらのイメージは正式な Docker イメージの拡張版で、CI/CD 環境にとって便利なツールが含まれます。

他サービスの追加と環境変数の設定

データベースなどのサービス用の追加コンテナを指定します。 environment キーを使用して、コンテナ内のすべてのコマンドで使用される環境変数を設定します。

version: 2
jobs:
  build:
    working_directory: ~/circleci-demo-python-django
    docker:
      - image: circleci/python:3.6.4 # every job must define an image for the docker executor and subsequent jobs may define a different image.
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
        environment:
          PIPENV_VENV_IN_PROJECT: true
          DATABASE_URL: postgresql://root@localhost/circle_test?sslmode=disable
      - image: circleci/postgres:9.6.2 # an example of how to specify a service container
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
        environment:
          POSTGRES_USER: root
          POSTGRES_DB: circle_test

依存関係のインストール

restore_cache ステップを使用して、キャッシュされたファイルまたはディレクトリを復元します。

checkout ステップを使用して、ソース コードをチェックアウトします。 デフォルトでは、working_directory で指定されたパスにソース コードがチェックアウトされます。

run ステップを使用して、bash コマンドを実行します。 この例では、Pipenv を使用して仮想環境を作成し、Python パッケージをインストールします。

version: 2
jobs:
  build:
    # ...
    steps:
      - checkout  # ソース コードを作業ディレクトリにチェックアウトします
      - run:
          command: |  # Pipenv を使用して依存関係をインストールします
            sudo pip install pipenv
            pipenv install

依存関係のキャッシュ

store_artifacts ステップを使用して、テスト結果をアーティファクトとして保存します。

save_cache ステップを使用して、いくつかのファイルまたはディレクトリをキャッシュします。 この例では、仮想環境とインストールされたパッケージがキャッシュされます。

実行の間隔を短縮するには、依存関係またはソース コードのキャッシュを検討してください。

version: 2
jobs:
  build:
    # ...
    steps:
      - checkout
      - run: sudo chown -R circleci:circleci /usr/local/bin
      - run: sudo chown -R circleci:circleci /usr/local/lib/python3.6/site-packages
      - restore_cache:  # このステップは依存関係をインストールする*前*に実行します
          key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
      - run:
          command: |
            sudo pip install pipenv
            pipenv install
      - save_cache:
          key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
          paths:
            - ".venv"
            - "/usr/local/bin"
            - "/usr/local/lib/python3.6/site-packages"

メモ: chown コマンドを使用して、依存関係の場所へのアクセスを CircleCI に許可します。

テストの実行

Use the run step to run your test suite.

version: 2
jobs:
  build:
    # ...
    steps:
      # ...
      - run:
        command: |
          pipenv run python manage.py test

テスト結果のアップロードおよび保存

store_test_results ステップを使用して、テスト結果を CircleCI にアップロードします。 この結果は、CircleCI アプリケーションのテスト サマリーセクションに表示されます。

Use the store_artifacts step to save test results as artifacts.

version: 2
jobs:
  build:
    # ...
    steps:
      # ...
      - store_test_results:
          path: test-results
      - store_artifacts:
          path: test-results
          destination: tr1

アプリケーションのデプロイ

この Django アプリケーションはどこにもデプロイされません。 デプロイの例については、Flask を使用したプロジェクトのチュートリアルまたはデプロイに関するドキュメントを参照してください。

設定ファイルの全文

version: 2 # use CircleCI 2.0
jobs: # A basic unit of work in a run
  build: # runs not using Workflows must have a `build` job as entry point
    # directory where steps are run
    working_directory: ~/circleci-demo-python-django
    docker: # run the steps with Docker
      # CircleCI Python images available at: https://hub.docker.com/r/circleci/python/
      - image: circleci/python:3.6.4
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
        environment: # environment variables for primary container
          PIPENV_VENV_IN_PROJECT: true
          DATABASE_URL: postgresql://root@localhost/circle_test?sslmode=disable
      # CircleCI PostgreSQL images available at: https://hub.docker.com/r/circleci/postgres/
      - image: circleci/postgres:9.6.2
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
        environment: # environment variables for the Postgres container.
          version: 2
jobs:
  build:
    working_directory: ~/circleci-demo-python-django
    docker:
      - image: circleci/python:3.6.4 # 各ジョブで Docker Executor のイメージを定義する必要があり、後続のジョブでは別のイメージを定義できます
        environment:
          PIPENV_VENV_IN_PROJECT: true
          DATABASE_URL: postgresql://root@localhost/circle_test?sslmode=disable
      - image: circleci/postgres:9.6.2 # サービス コンテナの指定方法を示す例
        environment:
          POSTGRES_USER: root
          POSTGRES_DB: circle_test
        POSTGRES_USER: root
          POSTGRES_DB: circle_test
    steps: # steps that comprise the `build` job
      - checkout # check out source code to working directory
      - run: sudo chown -R circleci:circleci /usr/local/bin
      - run: sudo chown -R circleci:circleci /usr/local/lib/python3.6/site-packages
      - restore_cache:
      # Read about caching dependencies: https://circleci.com/docs/2.0/caching/
          key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
      - run:
          command: |
            sudo pip install pipenv
            pipenv install
      - save_cache: # cache Python dependencies using checksum of Pipfile as the cache-key
          key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
          paths:
            - "venv"
      - run:
          command: |
            pipenv run python manage.py test
      - store_test_results: # Upload test results for display in Test Summary: https://circleci.com/docs/2.0/collect-test-data/
          path: test-results
      - store_artifacts: # Upload test summary for display in Artifacts: https://circleci.com/docs/2.0/artifacts/
          path: test-results
          destination: tr1

関連項目



ドキュメントの改善にご協力ください

このガイドは、CircleCI の他のドキュメントと同様にオープンソースで、GitHub で使用できます。 ご協力いただき、ありがとうございます。


クリエイティブ・コモンズ・ライセンス
CircleCICircleCI ドキュメントは、クリエイティブ・コモンズの表示--非営利-継承 4.0 国際ライセンス に基づいてライセンス供与されています。