AWSのCodePipeline/CodeBuildでRESTAPIテスト自動化
AWSのCodePipeline/CodeBuildでRESTAPIテスト自動化:
ついこの執筆の1週間前にCodePipelineをやっと触り始めて(AWS自体は1年前くらいから触り始めた)、CodePipeline完全に理解したので備忘のために記載します。
こんな感じのパイプラインを組みたかった
この辺り多分知っている人にとっては当たり前なのですが、私は入力アーティファクト&出力アーティファクトすらよく分からなかったので、同じレベル感で詰まっている人の助けになることを祈って書きます。
今回必須の条件として、codeBuildで動かせる(テスト結果をハンドリングできる)ことだったので、
これに対応するフレームワークを探したところ、frisby.jsが良さそうでした。(他にいいフレームワーク知っている方いたらご教示ください。)
1.リンクの通り、npmコマンドをぽちぽちやって環境構築
2.作成したtestspecフォルダ内に、RESTAPIのテスト資源(***test_spec.js)を作成(詳しい記載方法はリンク参照)
3.テスト実行時は下記のコマンドを実行
テストに成功すると下記のようなログが出力されるはず
※テスト数などは適宜読み替えてください
下記buildspec.ymlをtestFolder直下に格納でOKです
コードパイプライン、今回は
Sourceステージ、Testステージ、Buildステージ、Deployステージの4つとします。
CodeCommitに資源push→資源をビルド→サーバーにデプロイのパイプラインにテストステージを加えるものとします。
Sourceステージにアクションを追加で本来配備したい資源のCodeCommitとテスト資源が格納されている資源のCodeCommitの2つを並べる。
テスト資源CodeCommitの出力アーティファクト名は、今回は「TestSourceArtifact」とします。
ない場合はTestステージの追加から実施
Build、Deployステージは既存のままでOK
CodeBuildは裏でコンテナが起動して、buildspecのスクリプトを読み込んでいるんだ!という腹落ち感があってから理解がよく進んだ
入力アーティファクト、出力アーティファクトはパイプライン内で複数持てることを今回調査して知った
AWS楽しいですね!
ついこの執筆の1週間前にCodePipelineをやっと触り始めて(AWS自体は1年前くらいから触り始めた)、CodePipeline完全に理解したので備忘のために記載します。
0.前提
こんな感じのパイプラインを組みたかった- CodeCommitに資源が反映される
- 上記資源とは別のリポジトリにあるテスト用のプロジェクトをCodeBuildでテスト
- テストOKの場合、反映された資源をビルド&デプロイ
- テストは単体テストではなく、RESTAPIのテストを想定しており、プロジェクトのリポジトリとは独立して存在している
1.悩んだ点
- RESTAPIのテストフレームワーク何にしようか
- テスト資源のビルドスペック記載方法
- 参照したいプロジェクトが複数あるときどうすればいいのか(既存のパイプラインにどう組み込むか)
2.↑の解決策
この辺り多分知っている人にとっては当たり前なのですが、私は入力アーティファクト&出力アーティファクトすらよく分からなかったので、同じレベル感で詰まっている人の助けになることを祈って書きます。
・RESTAPIのテストフレームワーク何にしようか
今回必須の条件として、codeBuildで動かせる(テスト結果をハンドリングできる)ことだったので、これに対応するフレームワークを探したところ、frisby.jsが良さそうでした。(他にいいフレームワーク知っている方いたらご教示ください。)
構築手順
1.リンクの通り、npmコマンドをぽちぽちやって環境構築Console.log
$ cd testFolder $ npm install -g jasmine-node $ npm install frisby $ mkdir testspec
3.テスト実行時は下記のコマンドを実行
Console.log
$ cd testFolder/testspec $ jasmine-node .
Console.log
............... Finished in 21.753 seconds 15 tests, 28 assertions, 0 failures, 0 skipped
・テスト資源のビルドスペック記載方法
下記buildspec.ymlをtestFolder直下に格納でOKですbuildspec.yml
version: 0.2 phases: install: commands: - echo Installing Jasmine... - npm install -g jasmine-node pre_build: commands: - echo Installing source NPM dependencies... - npm install frisby build: commands: - echo Build started on `date` - echo Compiling the Node.js code - jasmine-node . post_build: commands: - echo Build completed on `date`
・既存のパイプラインにどう組み込むか
コードパイプライン、今回はSourceステージ、Testステージ、Buildステージ、Deployステージの4つとします。
CodeCommitに資源push→資源をビルド→サーバーにデプロイのパイプラインにテストステージを加えるものとします。
1.Sourceステージ
Sourceステージにアクションを追加で本来配備したい資源のCodeCommitとテスト資源が格納されている資源のCodeCommitの2つを並べる。テスト資源CodeCommitの出力アーティファクト名は、今回は「TestSourceArtifact」とします。
2.Testステージ
ない場合はTestステージの追加から実施- アクションの追加
- アクション名:任意(TestなどでOK)
- アクションプロパイダ:CodeBuild
- CodeBuild:CreateProject
--ここからCodebuild-- - プロジェクト名:任意
- 環境イメージ:マネージド
- OS:Ubntsu
- ランタイム:node.js
- サービスロール:適切な権限があるもの
- ビルド仕様:buildspec.ymlをチェック
--ここまでCodeBuild-- - 入力アーティファクト:TestSourceArtifact
- 出力アーティファクト:なし(本テスト資源で後続に渡す必要があるものはないため)
Build、Deployステージは既存のままでOK
所感など
CodeBuildは裏でコンテナが起動して、buildspecのスクリプトを読み込んでいるんだ!という腹落ち感があってから理解がよく進んだ入力アーティファクト、出力アーティファクトはパイプライン内で複数持てることを今回調査して知った
AWS楽しいですね!
コメント
コメントを投稿