やりたいこと
- AWS CodeBuild のビルドプロジェクトで Cypress E2E テストを実施したい
- ビルドプロジェクトの呼び出し元は Jenkins から行いたい
- 既存の CI/CD に追加する形で実現したかった
既存の CI/CD 資産に追加する形で E2E テストを実現する方法を調査&お試し。
前提
- github 上に Cypress E2E プロジェクトを用意している
設定
AWS IAM
- Jenkins から CodeBuild を実行するためのユーザを作成する
- アタッチするポリシーは「AWSCodeBuildDeveloperAccess」
- ※もっと権限を絞った適切なポリシーがあるかも
- 作成した際の「アクセスキー ID」「シークレットキー」を Jenkins ジョブの AWS Configuration に設定する
- アタッチするポリシーは「AWSCodeBuildDeveloperAccess」
AWS CodeBuild
- Cypress を実行する CodeBuild ビルドプロジェクトを作成する
- プロジェクトの設定
- プロジェクト名を記入
- Jenkins で作成したジョブの Project Configuration に設定する
- ソース
- ソースプロバイダで「GitHub」を選択
- リポジトリの URL に Cypress リポジトリの URL を記入
- 環境
- マネージド型イメージを選択
- Node.js が動けば OK
- マネージド型イメージを選択
- ログ
- グループ名を記入
- Buildspec
- 以下ビルドコマンドを記述
buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
nodejs: latest
commands:
# Set COMMIT_INFO variables to send Git specifics to Cypress Dashboard when recording
# https://docs.cypress.io/guides/continuous-integration/introduction#Git-information
- export COMMIT_INFO_BRANCH="$(git rev-parse HEAD | xargs git name-rev | cut -d' ' -f2 | sed 's/remotes\/origin\///g')"
- export COMMIT_INFO_MESSAGE="$(git log -1 --pretty=%B)"
- export COMMIT_INFO_EMAIL="$(git log -1 --pretty=%ae)"
- export COMMIT_INFO_AUTHOR="$(git log -1 --pretty=%an)"
- export COMMIT_INFO_SHA="$(git log -1 --pretty=%H)"
- export COMMIT_INFO_REMOTE="$(git config --get remote.origin.url)"
- npm ci
pre_build:
commands:
- npm run cy:verify
- npm run cy:info
build:
commands:
- npm run start:ci &
- npx cypress run
Jenkins
- CodeBuild ビルドプロジェクトを実行する Jenkins のジョブを作成する
- プラグインに「AWS CodeBuild Plugin」を追加する
- フリースタイル・プロジェクトのビルドを作成
- ビルドで「AWS CodeBuild」を選択(プラグインインストール後に選択可能)
- 設定値
- AWS Configuration
- Manually specify access and secret keys を選択
- AWS Access Key, AWS Secret Key に 作成した IAM ユーザを指定
- Project Configuration
- Region, Project Name は 作成したビルドプロジェクトを指定
- Use Project source を選択
- AWS Configuration