ごっそログ

勉強したことなどを書いていきます

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環境が完成した。

参考

https://docs.github.com/ja/actions/using-workflows

GitHub Actionsでキャッシュを利用してワークフローの実行時間を短縮する - Fusic Tech Blog