CircleCIでPythonのFlaskアプリをテストする

IT

CircleCIは今まで使ったことなかったので今回使ってみました。PythonのFlaskでHello Worldを出力するアプリを作成し、それをCircleCI上でテストするまでの手順を示します。

前提条件

  • CircleCIと連携させるリポジトリはGithub上に作成します。
    (Bitbucketとも連携させることができます。)
  • Pythonのテストはpytestを使用します。

GitHub上にリポジトリを作成

GitHub上に新しいリポジトリを作成します。

今回は次の4つのファイルをリポジトリに登録します。

  • hello_world.py : メインのpythonファイル
  • test_test01.py : テストコード
  • requirements.txt : 環境構築に必要なライブラリの一覧
  • ./.circleci/config.yml : CircleCIの構成ファイル
    (.circleciの下にあるconfig.ymlが当該プロジェクトの構成ファイルとして認識されます。)

CircleCI上にアカウントを作成

https://circleci.com/ja/signup/からユーザ登録をします。GitHubもしくはBitbucketのアカウントを連携してサインアップすることができます。

サインインするとOrganization選択画面が現れ、自分の組織を選択すると自分のリポジトリの一覧が表示されます。

ビルドの実行

ではビルドを実行していきます。上記のリポジトリの一覧画面で、該当するリポジトリの右のSet Up Projectボタンを押下します。今回はflask-circleci-testというリポジトリに対してビルドを実施していきます。

次の画面に遷移するのでStart Buildingボタンを押下します。

次のダイアログ画面が現れます。今回はすでに.circleciフォルダの下にconfig.ymlを作成済みなので、Add Manuallyを選択します。

次の画面では .circleci/config.ymlを追加済みであればビルドを開始できるとあるのでStart Buildingを押下します。

以下の通り、ビルドが実行され、結果が表示されます。緑でSuccessとなっていればOKです。

Successのところをクリックすると結果の詳細を確認できます。

以上で設定は完了です。

これ以降はGitHubのリポジトリに新しいファイルをコミットすると自動的にこのビルドが走るようになります。

.circleci/config.ymlの解説

version 構成ファイルのバージョンです。今回は2.1を指定しています。

version: 2.1

jobs 以降がジョブの定義になります。次の行のrun_testsはジョブの名称です。
その次はExecutor、つまり実行環境の記載です。docker/machine/macosから選びます。今回の実行環境はdockerにしたのでdockerを指定し、次の行で使用するイメージを指定します。

jobs: run_tests: docker: – image: circleci/python:3.7.4

stepsはこのジョブの中で処理されていくものの定義を記載する箇所です。
– checkout はプロジェクトのソースコードをワークディレクトリにチェックアウトします。
– runはコマンドを実行するためのものです。name処理に名前をつけることができます。commandで実際に実行するコマンドを記述します。runを宣言する度に新しいシェルが立ち上がります。複数行記載して、複数のコマンドを同じシェルで実行することができます。

steps: – checkout – run: name: Install Python Dependencies command: | echo ‘export PATH=~$PATH:~/.local/bin’ >> $BASH_ENV && source $BASH_ENV pip install –user -r requirements.txt – run: name: Run Unit Tests command: | pytest –junitxml=test-reports/junit.xml –html=test-reports/pytest_report.html –self-contained-html

store_test_resultsはテスト結果をアップロードするために使用します。
store_artifactsはWeb アプリケーションや API を通じて使う artifacts(ログ、バイナリなど)を保存します。今回はテスト結果を保存するパスを指定しており、テスト結果をartifactsとして保存する設定になっています。

workflowsはジョブの自動化するためのものです。build_testはワークフローの名前で、workflows配下にあるワークフローはそれぞれユニークな名前でないといけません。
jobsはworkflowを構成するジョブ集まりで、次の行のrun_testsはジョブの名称です。

workflows: build_test: jobs: – run_tests

まとめ

とりあえず、pythonのFlaskアプリをCircleCI上でテストするまでの流れを記載しました。簡単にCI/CDの環境が作れるということがわかりました。初めて触りましたが、まだわからないこともあり、またいろいろなことができるので試していこうと思います。

コメント