CodePipelineとPytestで自動テスト
別にPythonじゃなくてCでもC++でもいいんだけど、機械学習屋さんとしてはPythonに慣れ親しんでいるので、その例でトライ。 HelloWorldで書いても良かったけど、せっかくなのでgit pushすると、自動でPytestが動くようなもの。
CodeCommitとPytestとbuildファイルの準備
手元のgit環境の準備
CodeCommitにリポジトリを作成して、自在にgit clone, git pushできる環境を作っておく。 EC2にIAMロールを設定してやるのが一番シンプル。
適切なPythonコードの準備
ディレクトリ構成はこんな感じ。今回はtest_1.pyじゃなくて、test_str.pyという名前にする。
test_str.pyは、すごく簡単なテストを置く。
def test_str(): assert 'a' == 'a' assert 'b' == 'b'
buildspec.yamlファイルの準備
こんなファイルを準備。
version: 0.2 phases: install: runtime-versions: python: 3.8 commands: - pip3 install pytest build: commands: - echo test - pytest --junit-xml=reports/unittest_results.xml reports: pytest_reports: files: - unittest_results.xml base-directory: reports file-format: JUNITXML
- python3.8を使いますという宣言
- テストをしたいのでpytestをインストール
- pytestコマンドの実行 オプションとして、レポートファイルを出力
ちなみにpytestはフォーマットに従っていれば、ディレクトリなどを指定しなくても自動でテストファイルを探してテストしてくれる。
buildspec.yamlは下記のようなディレクトリ構成位置に置く。
CodeBuildの準備
ビルドプロジェクトの作成
マネジメントコンソールから、下記の設定で作っていく。
環境についてはpythonと機械学習ならUbuntuを選んでおくと良い気がする。確信はない。
(本来は環境がちゃんと用意されたDockerイメージを用意したほうが良いと思う。それは今度勉強する予定。)
ランタイムはStandardでとりあえず動く。
Buildspecは前項で作ったファイルを使うので、buildspecファイルを使用する。を選択。 これでビルドプロジェクトを作成。
CodePipelineの準備
プロジェクト名を任意で付与して作る。
ソースステージ
ビルドステージ
- プロバイダー:AWS CodeBuild
- リージョン:アジア・パシフィック(東京)
- プロジェクト名:CodeBuildの準備で作成したプロジェクト名 残りはデフォルト。
デプロイステージ
今回は自動テストまでをスコープとするので、導入段階をスキップをクリック。 以上でパイプラインを作成できる。
自動テスト
恐らくパイプラインを作っただけで、1回目のパイプラインが流れる、と思う。 テストはエラーが起きないようなテストなので、成功するはず。
以降、コードをPUSHするたびに自動的にパイプラインが流れ、自動テストが実行される。 実行結果はCodeBuildのビルド履歴やレポート履歴で見ることが可能。