Gradle로 Java 빌드 및 테스트하기

Gradle로 Java 빌드 및 테스트하기

GitHub Actions에서 Gradle로 Java 프로젝트를 빌드하고 테스트하는 지속적 통합(CI) 워크플로를 만드는 방법을 알려드릴게요.

출처: 문서

본문

GitHub Actions에서 Gradle 빌드 시스템을 사용해서 Java 프로젝트에 대한 지속적 통합(CI)을 수행하는 워크플로를 어떻게 만드는지 알아봅니다.

소개

이 가이드는 Gradle 빌드 시스템을 사용해서 Java 프로젝트에 대한 지속적 통합(CI)을 수행하는 워크플로를 만드는 방법을 보여줍니다. 만든 워크플로를 통해 풀 리퀘스트의 커밋이 기본 브랜치에 대해 빌드나 테스트 실패를 일으키는 시점을 확인할 수 있습니다. 이 접근 방식은 코드가 항상 정상 상태를 유지하는 데 도움이 될 수 있습니다. CI 워크플로를 확장해서 파일을 캐시하고 워크플로 실행에서 아티팩트를 업로드할 수 있습니다.

GitHub 호스팅 러너에는 Java Development Kits(JDK)와 Gradle을 포함한 사전 설치된 소프트웨어가 있는 도구 캐시가 있습니다. JDK와 Gradle의 소프트웨어 및 사전 설치된 버전 목록은 GitHub-hosted runners를 참고하세요.

사전 요구 사항

YAML과 GitHub Actions 구문에 익숙해야 합니다. 자세한 내용은 다음을 참고하세요:

Java와 Gradle 프레임워크에 대한 기본적인 이해를 권장합니다. 자세한 내용은 Gradle User Manual을 참고하세요.

Gradle 워크플로 템플릿 사용하기

빠르게 시작하려면 저장소의 .github/workflows 디렉터리에 워크플로 템플릿을 추가하세요.

GitHub는 대부분의 Java with Gradle 프로젝트에서 작동하는 Gradle용 워크플로 템플릿을 제공합니다. 이 가이드의 이후 섹션은 이 워크플로 템플릿을 사용자 지정하는 방법의 예시를 제공합니다.

  1. GitHub에서 저장소의 메인 페이지로 이동합니다.

  2. 저장소 이름 아래에서 Actions를 클릭합니다.

    Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline.

  3. 저장소에 이미 워크플로가 있다면 New workflow를 클릭합니다.

  4. "Choose a workflow" 페이지에 추천 워크플로 템플릿 목록이 표시됩니다. "Java with Gradle"을 검색하세요.

  5. "Java with Gradle" 워크플로에서 Configure를 클릭합니다. 이 워크플로는 다음 단계를 수행합니다:

  6. 프로젝트 저장소의 복사본을 체크아웃합니다.

  7. Java JDK를 설정합니다.

  8. Gradle 환경을 설정합니다. gradle/actions/setup-gradle 액션은 워크플로 실행 간의 캐싱 상태를 처리하고 모든 Gradle 실행에 대한 상세 요약을 제공합니다.

  9. "Build with Gradle" 스텝은 Gradle Wrapper를 사용해서 build 작업을 실행합니다.

  10. 필요에 따라 워크플로를 편집합니다. 예를 들어 Java 버전을 변경합니다.

    [!NOTE]

    • 이 워크플로 템플릿에는 GitHub가 인증하지 않은 액션이 포함되어 있습니다. 제3자가 제공하는 액션은 별도의 서비스 약관, 개인정보 보호 정책, 지원 문서의 적용을 받습니다.
    • 제3자의 액션을 사용한다면 커밋 SHA로 지정된 버전을 사용해야 합니다. 액션이 수정되고 최신 버전을 사용하려면 SHA를 업데이트해야 합니다. 태그나 브랜치를 참조해서 버전을 지정할 수도 있지만 액션이 경고 없이 변경될 수 있습니다. 자세한 내용은 Secure use reference를 참고하세요.
  11. Commit changes를 클릭합니다.

    gradle.yml 워크플로 파일이 저장소의 .github/workflows 디렉터리에 추가됩니다.

Java 버전과 아키텍처 지정하기

워크플로 템플릿은 x64 플랫폼용 OpenJDK 8이 포함되도록 PATH를 설정합니다. 다른 Java 버전을 사용하거나 다른 아키텍처(x64 또는 x86)를 대상으로 하려면 setup-java 액션을 사용해서 다른 Java 런타임 환경을 선택할 수 있습니다.

예를 들어 x64 플랫폼용으로 Adoptium이 제공하는 JDK 11 버전을 사용하려면 setup-java 액션을 사용하고 java-version, distribution, architecture 파라미터를 각각 '11', 'temurin', x64로 구성할 수 있습니다.

steps:
  - uses: actions/checkout@v6
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v4
    with:
      java-version: '11'
      distribution: 'temurin'
      architecture: x64

자세한 내용은 setup-java 액션을 참고하세요.

코드 빌드 및 테스트하기

로컬에서 코드를 빌드하고 테스트하는 데 사용하는 것과 같은 명령을 사용할 수 있습니다.

워크플로 템플릿은 기본적으로 build 작업을 실행합니다. 기본 Gradle 구성에서 이 명령은 의존성을 다운로드하고, 클래스를 빌드하고, 테스트를 실행하고, 클래스를 배포 가능한 형식(예: JAR 파일)으로 패키징합니다.

프로젝트를 빌드하는 데 다른 명령을 사용하거나 다른 작업을 사용하려면 그것들을 지정할 수 있습니다. 예를 들어 ci.gradle 파일에 구성된 package 작업을 실행하고 싶을 수 있습니다.

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
steps:
  - uses: actions/checkout@v6
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'

  - name: Setup Gradle
    uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2

  - name: Build with Gradle
    run: ./gradlew -b ci.gradle package

의존성 캐싱하기

빌드 의존성을 캐시해서 워크플로 실행을 빠르게 할 수 있습니다. 성공적인 실행 후 gradle/actions/setup-gradle은 Gradle 사용자 홈 디렉터리의 중요한 부분을 캐시합니다. 이후 잡에서는 캐시가 복원되므로 빌드 스크립트를 다시 컴파일할 필요가 없고 원격 패키지 저장소에서 의존성을 다운로드할 필요가 없습니다.

gradle/actions/setup-gradle 액션을 사용하면 캐싱이 기본적으로 활성화됩니다. 자세한 내용은 gradle/actions/setup-gradle을 참고하세요.

워크플로 데이터를 아티팩트로 패키징하기

빌드가 성공하고 테스트가 통과한 후 결과 Java 패키지를 빌드 아티팩트로 업로드하고 싶을 수 있습니다. 이렇게 하면 빌드된 패키지가 워크플로 실행의 일부로 저장되고 다운로드할 수 있습니다. 아티팩트는 풀 리퀘스트를 머지하기 전에 로컬 환경에서 테스트하고 디버깅하는 데 도움이 될 수 있습니다. 자세한 내용은 Store and share data with workflow artifacts를 참고하세요.

Gradle은 일반적으로 JAR, EAR, WAR 같은 출력 파일을 build/libs 디렉터리에 만듭니다. upload-artifact 액션을 사용해서 해당 디렉터리의 내용을 업로드할 수 있습니다.

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
steps:
  - uses: actions/checkout@v6
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'

  - name: Setup Gradle
    uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2

  - name: Build with Gradle
    run: ./gradlew build

  - name: Upload build artifacts
    uses: actions/upload-artifact@v4
    with:
      name: Package
      path: build/libs

더 알아보기 (Learn more)