Search Results for ""

CircleCI での Python アプリケーションの設定

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

概要

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

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

設定の詳細説明

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

バージョンの指定

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

version: 2

ビルドジョブの作成

1回の実行は 1つ以上のジョブで構成されます。 この実行では Workflows を使用していないため、build ジョブを持つ必要があります。

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

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

Executor タイプの選択

ジョブのステップは 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 が提供するコンビニエンスイメージです。 これらのイメージは正式な Docker イメージの拡張版で、CI/CD 環境にとって便利なツールが含まれます。

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

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

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

依存関係のインストール

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

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

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

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

依存関係のキャッシュ

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

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

restore_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 に許可します。

テストの実行

run ステップを使用して、テストスイートを実行します。

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

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

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

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

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

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

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

完全な設定ファイル

version: 2 # CircleCI 2.0 を使用します
jobs: # 1回の実行の基本作業単位
  build: # Workflows を使用しない実行では、エントリポイントとして `build` ジョブが必要
    # ステップが実行されるディレクトリ
    working_directory: ~/circleci-demo-python-django
    docker: # Docker でステップを実行します
      # CircleCI Python イメージは https://hub.docker.com/r/circleci/python/ で入手できます
      - image: circleci/python:3.6.4
        environment: # プライマリコンテナの環境変数
          PIPENV_VENV_IN_PROJECT: true
          DATABASE_URL: postgresql://root@localhost/circle_test?sslmode=disable
      # CircleCI PostgreSQL イメージは https://hub.docker.com/r/circleci/postgres/ で入手できます
      - image: circleci/postgres:9.6.2
        environment: # Postgres コンテナのための環境変数
          POSTGRES_USER: root
          POSTGRES_DB: circle_test
    steps: # `build` ジョブを構成するステップ
      - 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:
      # 依存関係キャッシュについては https://circleci.com/docs/ja/2.0/caching/ をお読みください
          key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
      - run:
          command: |
            sudo pip install pipenv
            pipenv install
      - save_cache: # Pipfile のチェックサムをキャッシュキーとして使用して、Python の依存関係をキャッシュします
          key: deps9-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
          paths:
            - ".venv"
            - "/usr/local/bin"
            - "/usr/local/lib/python3.6/site-packages"
      - run:
          command: |
            pipenv run python manage.py test
      - store_test_results: # テストサマリー (https://circleci.com/docs/ja/2.0/collect-test-data/) に表示するテスト結果をアップロードします
          path: test-results
      - store_artifacts: # アーティファクト (https://circleci.com/docs/ja/2.0/artifacts/) に表示するテストサマリーをアップロードします
          path: test-results
          destination: tr1

関連項目