Nuxt 3+Spring BootでREST API #7 GitHub ActionsでCI環境を構築する
目次
リポジトリを作成する
前回作成したJUnitをCI環境に組み込み、プルリクエストを作成、更新した時点で自動でテストが走るようにしたい。
今回はGitHub Actionsを使用するが、まずはリポジトリを作らないと始まらないのでrest-api-sample
という名前で作成する。
GitHub Actionsワークフローの定義を行う
次にワークフローの定義。
リポジトリのルートに.github\workflows
ディレクトリを作成。
workflowsの中にyaml形式でファイルを作成することでワークフローとして認識される。
今回はapi-test.yml
という名前で作成した。
name: api-test on: pull_request: types: [ opened, synchronize ] jobs: api-test: runs-on: ubuntu-latest steps: - name: checkout source uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: 17 distribution: "temurin" - uses: actions/setup-node@v1 with: node-version: "14" - name: Cache for node_modules uses: actions/cache@v2 with: path: "**/node_modules" key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - name: build java project by gradle run: sh ./gradlew clean build
on
でワークフローをトリガーするイベントを定義する。
今回はプルリクエストが作成されたり、更新されたりしたタイミングでワークフローを実行したいので、typesにopened
, synchronize
を指定した。
jobs
で実行させたいジョブを定義する。
steps
の具体的な内容に関しては今回は詳述しないが、ざっくり言うと
- リポジトリからソースをチェックアウトする
- JDK 17のセットアップを行う
- Node.jsのセットアップを行う
- ライブラリのインストールをキャッシングする
- APIプロジェクトをビルドする (ここでテストが走る)
のような流れになっている。
ひとまず上記のyamlファイルをプッシュして準備完了。
試運転
適当なブランチを切ってプルリクを出し、CIが動くか試してみる。
まずtest_gha
という名前のブランチを切る。
適当にロジックを更新して
コミットして、リモートにプッシュしたらプルリクの作成を行う。
定義したジョブが走っているのがわかる。
テストにパスし、ビルド完了。
あえてテストコードを間違った内容に変更し、テストが失敗したときの動作を見てみる。
テストコードを変更し、再度コミット、プッシュ。
(先ほどtypesにsynchronize
を設定したので) プルリクが更新された場合もワークフローが実行されることがわかる。
テスト失敗。
というわけで、簡易的なAPIプロジェクトのCI環境が完成した。