S3 をプロバイダーにした CI で Django のユニットテストを実行してみたのでメモ
以前の記事で backlog に push したのをトリガーにソースコードを S3 に配置するところまでやってみたのでその続きとして CI を設定した時のメモです。
前提
- ソースコードを管理する S3 バケットが作成されている事。
処理の流れ
- S3 にコードが配置される。
- コードパイプラインが実行される。
- コードパイプラインのステージ「コードビルド」が実行される。
- コードビルドで buildspec.yml が実行される。
- buildspec.yml でコンテナが作成され django の unit テストを実行される。
ビルドプロジェクトを作成する
- ビルドプロジェクトのページを開き「プロジェクトの作成」をクリックする。
- 下記の通り設定する。
S3 バケット hogehoge-bucket の直下にソースコードの圧縮ファイル hoge.zip が配置される想定。
イメージは最新のを選択しています。すでにロールを作成している場合は既存のサービスロールを選択する。
- 「ビルドプロジェクトを作成する」をクリックする。
パイプラインを作成する
- パイプラインのページを開き「パイプラインを作成する」をクリックする。
- 下記の通り設定する。 すでにロールを作成している場合は既存のサービスロールを選択する。
コードビルドで設定したバケット名と S3 オブジェクトキー名入力する。
プロジェクト名は、先ほど作成したコードビルドを入力する。
今回は、デプロイしないので「導入段階をスキップ」をクリックする。 (後からでも追加可能です。)
- 「パイプラインを作成する」をクリックする。
buildspec.yml を作成する
下記のような buildspec.yml をソースコードのリポジトリのルートに配置します。
環境は docker-compose.ci.yml というファイルを使っておこなっている例です。
version: 0.2
phases:
pre_build:
commands:
- echo Grant Privilages To MySql User
- docker-compose -f docker-compose.ci.yml up -d
- docker ps
- docker exec -t db_ci_container mysql -uroot -proot_password -e"GRANT ALL PRIVILEGES ON test_database.*to 'user_name';"
build:
commands:
- echo Execute Tests
- docker exec web_ci_container python3.8 /project/backend/manage.py test
post_build:
commands:
- docker-compose logs
- echo Done
実行する
clone してきたソースコードのリポジトリに buildspec.yml を加えたら、リポジトリに入って ZIP します。
zip -r test.zip ./*
対象の s3 に ZIP したコードを入れたら無事テストが実行されました。
ディスカッション
コメント一覧
まだ、コメントがありません