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

Last updated
Tags クラウド Server v3.x Server v2.x

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

OR

Explore Logo

Explore a sample app

Check out a Python sample app running on CircleCI.

Completion Time 10 min task

はじめに

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

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

設定ファイルの詳細

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

1. バージョンの指定

すべての config.yml は、最初にバージョンキーを指定します。 このキーは、互換性を損なう変更に関する警告を表示するために使用します。

version: 2.1

2.1 は、CircleCI の最新のバージョンであり、CircleCI のすべての最新機能と改善事項の利用が可能です。

2. Python Orb の使用

Python Orbには、Python プログラミング言語用の一般的な CircleCI タスクの実行に使用できるパッケージ化された CircleCI 設定セットが含まれています。 これは、Linux x86_64、macOS x86_64、Arm64 をサポートしています。 Orb に関する詳細は、こちらをご覧ください。

設定にこの Orb を追加するには、下記を挿入します。

orbs:
  python: circleci/python@1.5.0

注: 組織の設定で、サードパーティ製 Orb の使用を有効にする、または組織の CircleCI 管理者にアクセス許可をリクエストする必要がある場合があります。

3. ワークフローの作成

ワークフロー は、一連のジョブとその実行順序を定義するためのルールです。 ワークフローを使用すると、設定キーを組み合わせて複雑なジョブ オーケストレーションを構成でき、問題の早期解決に役立ちます。 ワークフロー内で実行したいジョブを定義します、 このワークフローはコミットのたびに実行されます。 詳細は、ワークフローの設定を参照して下さい。

workflows:
  my_workflow: # ワークフロー名です。お客様のワークフローに合う名前に変更して下さい。

4. ジョブの作成

ジョブは設定の構成要素です。 また、必要に応じてコマンド / スクリプトを実行するステップの集まりです。 ジョブ内のステップは、すべて 1 単位として新しいコンテナまたは仮想マシン内で実行されます。 ジョブに関する詳細は、こちらを参照して下さい。

CircleCI を使い始めた開発者からよくいただく質問は、ビルド、テスト、デプロイの 3 つの基本タスクの実行に関してです。 このセクションでは必要な設定の各変更について説明します。 CircleCI では公式の Python Orb を使っているため、これらのステップを簡単に実行することができます。

a. アプリのビルドとテスト

このステップでは、Python Orb で使われている python/install-packages コマンドを使用します。 このコマンドにより自動的に Python 環境が設定され、お客様のプロジェクトにpipによりグローバルに、またはpoetrypipenvによりvirtualenvにパッケージがインストールされます。

jobs:
  build_and_test: # 任意の名前をお選びください。
    docker:
      - image: cimg/python:3.10.1
    steps:
      - checkout
      - python/install-packages:
          pkg-manager: pip
      - run:
          name: テストの実行
          command: python -m pytest
      - persist_to_workspace:
          root: ~/project
          paths:
            - .

b. アプリのデプロイ

この例では、 Heroku へのデプロイを選択しています。 これは公式の Heroku Orb を使って、Orb のセクションに新しい文字列を加えることによって実行できます。 Heroku Orb には、アプリケーションを Heroku にデプロイするために使用できる事前にパッケージ化された CircleCI 設定セットが含まれています。 Heroku Orb に関する詳細は、こちらを参照して下さい。

orbs:
  python: circleci/python@1.5.0
  heroku: circleci/heroku@1.2.6

次に、デプロイステップを実行するために、リストにジョブを追加する必要があります。

jobs:
  # ...以前のジョブ...
  deploy: # 任意の名前をお選びください。
    docker:
      - image: cimg/python:3.10.1
    steps:
      - attach_workspace:
          at: ~/project
      - heroku/deploy-via-git:
          force: true # リモートで Heroku にプッシュする場合は、強制プッシュします。https://devcenter.heroku.com/articles/git を参照して下さい。

注: HEROKU_API_KEYHEROKU_APP_NAME などの必要なシークレットを含む環境変数が CircleCI の UI にセットアップされる可能性があります。 環境変数に関する詳細は、こちらを参照して下さい。

c. ワークフローへのジョブの追加

これで build_and_test ジョブと deploy ジョブが作成されたので、build_test_deployワークフローを完成させます。 同時実行、連続、および手動承認ワークフローを使ったジョブ実行のオーケストレーションの詳細については、ワークフローを参照してください。

workflows:
  build_test_deploy: # 任意の名前をお選びください。
    jobs:
      - build_and_test
      - deploy:
          requires:
            - build_and_test # build_and_test ジョブが完了している場合のみデプロイします。
          filters:
            branches:
              only: main # main にある場合のみデプロイします、

5. まとめ

成功です! CircleCI 上にビルドする Python アプリケーションを設定しました。 CircleCI でビルドを行うとどのように表示されるかについては、プロジェクトのパイプラインのページを参照してください。

設定ファイルの全文

version: 2.1
orbs:
  python: circleci/python@1.5.0
  heroku: circleci/heroku@1.2.6

jobs:
  build_and_test: # 任意の名前をお選びください。
    docker:
      - image: cimg/python:3.10.1
    steps:
      - checkout
      - python/install-packages:
          pkg-manager: pip
      - run:
          name: テストの実行
          command: python -m pytest
      - persist_to_workspace:
          root: ~/project
          paths:
            - .

  deploy: # 任意の名前をお選びください。
    docker:
      - image: cimg/python:3.10.1
    steps:
      - attach_workspace:
          at: ~/project
      - heroku/deploy-via-git:
          force: true # リモートで Heroku にプッシュする場合は、強制プッシュします。https://devcenter.heroku.com/articles/git を参照して下さい。

workflows:
  test_my_app:
    jobs:
      - build_and_test
      - deploy:
          requires:
            - build_and_test # build_and_test ジョブが完了している場合のみデプロイします。
          filters:
            branches:
              only: main # main にある場合のみデプロイします。

関連項目



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

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

サポートが必要ですか?

CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。

または、サポートサイトから、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。