4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CodeBuild時にGradleのバージョンが古くて失敗する

Last updated at Posted at 2022-10-11

現象

  • CodeBuildのbuildspec.ymlでgradleコマンドを実行した際に以下のようなエラーが発生した
[Container] 2022/10/07 02:43:03 Running command gradle build -x test
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details

FAILURE: Build failed with an exception.

* Where:
Build file '/codebuild/output/src757482764/src/app/build.gradle' line: 7

* What went wrong:
An exception occurred applying plugin request [id: 'com.diffplug.spotless', version: '6.11.0']
> Failed to apply plugin [id 'com.diffplug.spotless']
   > Spotless requires Gradle 6.1.1 or newer, this was 5.6.4

環境

  • 言語:Java 11
  • コードフォーマッター:com.diffplug.spotless 6.11.0
  • ビルドツール:Gradle 7.4.2
  • CodeBuildイメージ:aws/codebuild/amazonlinux2-x86_64-standard:3.0

原因

  • SpotlessにはGradle 6.1.1以上が必要だけど、CodeBuildはデフォルトだとGradle 5.6.4なのでbuildが通らなかった

対応

  • gradleコマンドではなくgradlewを使用する
  • gradlewには、CodeBuildでも実行ができるように、実行権限をつけておく

詳細

  • 以下のようなbuildspec.ymlを使用していた
buildspec.yml
version: 0.2
phases:
  pre_build:
    # ...省略...
  build:
    commands:
      # Build
      - echo Build started on `date`
      - cd app
      # ロケールを設定しないとCodeBuild上でのcompileTestJavaに失敗する
      - export LANG='en_US.utf8'
      - gradle build -x test
      # ...省略...
  post_build:
      # ...省略...
  • そのまま実行すると冒頭のエラーが発生したので、gradlegradlewに変更して実行
buildspec.yml
  # ...省略...
  build:
    commands:
      # ...省略...
      - ./gradlew build -x test
      # ...省略...
  • 以下のようなエラーが発生
[Container] 2022/10/07 03:43:28 Running command ./gradlew build -x test
/codebuild/output/tmp/script.sh: line 4: ./gradlew: Permission denied
  • 実行時に権限を付与するように修正
buildspec.yml
  # ...省略...
  build:
    commands:
      # ...省略...
      - chmod 755 ./gradlew
      - ./gradlew build -x test
      # ...省略...
  • 実行できた!

CodeBuildのgradleのバージョンについて

  • 今回、CodeBuild時に使用するイメージは以下を指定していた
    • aws/codebuild/amazonlinux2-x86_64-standard:3.0
  • 上記イメージはデフォルトではどのバージョンのgradleを使用しているのか?
  • 以下のイメージの一覧から上記のイメージのDockerfileを参照してみる
  • gradle 5.6.4 を使用していることが分かった
    • 冒頭のエラーメッセージに出力されたバージョンとも一致する
    • 以下、設定に関する記述を抜粋
Dockerfile
# ...省略...
ENV JAVA_11_HOME="/usr/lib/jvm/java-11-amazon-corretto.x86_64" \
#    ...省略...
    INSTALLED_GRADLE_VERSIONS="4.10.3 5.6.4" \
    GRADLE_VERSION=5.6.4 \
#    ...省略...
    # Install default GRADLE_VERSION to path
    && ln -s /usr/local/gradle-$GRADLE_VERSION/bin/gradle /usr/bin/gradle \
#    ...省略...

gradlewについて

まとめ

  • gradlewを使おう!

未検証だけど代替手段になりそうなもの

参考情報

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?