Keep on moving

あんまりまとまってないことを書きますよ

GitHub ActionsでGradle環境でCIを回してみる

こんにちは、yaml苦手っ子です。GitHub Actions+GradleでCIする方法をまとめます。

key value
Last Update 2020/07/06

Gradle

こちらを参考にすればOK.

docs.github.com

超シンプルに書くとこんな感じ。

name: Java CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Build with Gradle
        run: ./gradlew test

Cacheを利用する

ここをみると以下のように説明されている。

依存関係をキャッシュしてワークフローのスピードを上げる - GitHub Docs

GitHubホストランナー上のジョブは、クリーンな仮想環境で開始され、依存関係を毎回ダウンロードしなければならず、ネットワークの利用率を増大させ、実行時間が長くなり、コストが高まってしまいます。

なるほど、というわけでキャッシュの使い方をまとめてみる。

actions/cacheを使う

actions cacheを使う方法。 github.com

A repository can have up to 5GB of caches. Once the 5GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. どうやら5GiBの制限があるみたい

READMEにちゃんと設定が書いてある。例としては以下のような感じ

name: Run Gradle unit-test on Push
on: [pull_request, push]
jobs:
  gradle:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: 8
      - name: Cache Gradle packages
        uses: actions/cache@v2
        with:
          path: ~/.gradle/caches
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
          restore-keys: ${{ runner.os }}-gradle
      - name: Build with Gradle
        run: ./gradlew test

gradle pluginでcacheを使う

ちなみに eskatos/gradle-command-action@v1 でもcacheを使うことが可能だったりします。

github.com このActtionではcacheを以下の3つに分けてあるとのこと。(default でwrapper-cacheのみ有効.多分キャッシュの制限が原因)

wrapper-cache-enabled: true
dependencies-cache-enabled: true
configuration-cache-enabled: true

以下のような感じになる

github.com

name: "CI"

on: [pull_request, push]


jobs:
  ci:
    name: "CI"
    runs-on: ubuntu-latest
    steps:

      - name: Checkout sources
        uses: actions/checkout@v2

      - name: Setup Java 11
        uses: actions/setup-java@v1
        with:
          java-version: 11

      - name: Build with Gradle
        uses: eskatos/gradle-command-action@v1
        with:
          dependencies-cache-enabled: true
          configuration-cache-enabled: true
          arguments: test

参考

GradleでのJavaのビルドとテスト - GitHub Docs

GitHub ActionsでGradleの自動ビルド/テストをする [再掲] | Qrunch(クランチ)