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 タイプの選択
ジョブの各ステップは 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: # ワークフローを使用しない実行では、エントリポイントとして `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/ja/docs/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/ja/docs/2.0/collect-test-data/) に表示するテスト結果をアップロードします
path: test-results
- store_artifacts: # アーティファクト (https://circleci.com/ja/docs/2.0/artifacts/) に表示するテスト サマリーをアップロードします
path: test-results
destination: tr1
関連項目
- 他の言語ガイドについては、「チュートリアル」を参照してください。