GitHub Actions로 Java 빌드 자동화
Source: Dev.to

우리는 모두 그런 경험을 해봤습니다. 코드를 작성하고, 노트북에서는 완벽히 실행되지만, 푸시하면 다른 사람 모두에게 빌드가 깨지는 경우죠. 혹은 더 심각하게, 누군가 테스트를 실행하는 것을 잊어버려 버그가 프로덕션에 슬쩍 들어가는 상황도 있습니다.
이때 지속적 통합(Continuous Integration, CI)이 등장합니다.
이 가이드에서는 코드를 푸시할 때마다 두 개의 마이크로서비스 애플리케이션(주문 서비스 & 제품 서비스)을 자동으로 빌드하고 테스트하는 매우 간단한 GitHub Actions 워크플로우를 자세히 살펴보겠습니다.
어떤 문제를 해결하나요?
코드를 보기 전에, 왜 이것이 필요한지 이해해 봅시다. 이 YAML 파일은 여러분의 저장소에 존재하며 세 가지 큰 문제를 해결합니다:
- Consistency – 코드를 깔끔하고 중립적인 환경(Ubuntu)에서 빌드하므로, 여러분의 복잡할 수 있는 노트북에서 빌드하는 것을 피합니다.
- Early Bug Detection – 모든 Pull Request마다 테스트를 자동으로 실행해, 깨진 코드를 병합하지 못하도록 합니다.
- Monorepo Support – 하나의 저장소에서 여러 서비스(주문 서비스와 제품 서비스)를 관리하며, 한 서비스의 변경이 다른 서비스를 깨뜨리지 않도록 보장합니다.
워크플로 파일
다음은 분석할 전체 ci.yml 파일입니다:
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build and Test Order Service
working-directory: ./OrderService
run: |
chmod +x mvnw
./mvnw clean verify
- name: Build and Test Product Service
working-directory: ./ProductService
run: |
chmod +x mvnw
./mvnw clean verify
Source: …
코드 분석
1. 설정 및 트리거
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
name– 워크플로우가 GitHub의 Actions 탭에 표시되는 이름입니다.on– 워크플로우를 트리거하는 이벤트들입니다.push–main브랜치에 코드가 푸시될 때마다 실행됩니다.pull_request– PR이main을 대상으로 할 때마다 실행됩니다(코드 리뷰에 필수).workflow_dispatch– “Run workflow” 버튼을 추가해 수동으로 시작할 수 있게 해줍니다(디버깅에 유용).
2. 환경 (Job)
jobs:
build:
runs-on: ubuntu-latest
jobs– 워크플로우는 하나 이상의 작업(job)으로 구성됩니다; 여기서는build라는 단일 작업을 사용합니다.runs-on: ubuntu-latest– GitHub가 최신 Ubuntu 릴리스를 실행하는 새로운 가상 머신을 제공하고, 이후 단계들은 모두 이 VM에서 실행됩니다.
3. 단계 (실제 작업)
단계 A – 코드 가져오기
steps:
- name: Checkout code
uses: actions/checkout@v4
uses– GitHub Marketplace에서 미리 만들어진 액션을 가져옵니다.actions/checkout은 리포지토리를 러너에 복제해 워크플로우의 나머지 단계가 파일에 접근할 수 있게 합니다.
단계 B – Java 준비
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
actions/setup-java– 러너에 Java를 설치합니다.distribution: 'temurin'– Eclipse Temurin 빌드의 OpenJDK를 사용합니다.cache: maven– 실행 간 Maven 의존성을 캐시하여 빌드 속도를 크게 향상시킵니다.
단계 C – 마이크로서비스 빌드
Order Service
- name: Build and Test Order Service
working-directory: ./OrderService
run: |
chmod +x mvnw
./mvnw clean verify
Product Service
- name: Build and Test Product Service
working-directory: ./ProductService
run: |
chmod +x mvnw
./mvnw clean verify
working-directory– 명령을 실행하기 전에 지정된 폴더로 이동합니다(모노레포에서 필요합니다).chmod +x mvnw– Maven Wrapper 파일에 실행 권한을 부여합니다../mvnw clean verify– Maven Wrapper를 실행해 프로젝트에 정의된 정확한 Maven 버전을 보장합니다.verify는 전체 라이프사이클을 실행해 통합 테스트 검증까지 수행하므로install만 실행하는 것보다 더 철저한 검사를 제공합니다.
GitHub에서 설정하는 방법
-
프로젝트 열기 (로컬 또는 GitHub에서).
-
디렉터리 구조 만들기:
.github/ └─ workflows/ -
워크플로 파일 만들기:
- Path:
.github/workflows/ci.yml - 위에 표시된 YAML 내용을 추가합니다.
- Path:
-
커밋하고 푸시하기:
git add .github/workflows/ci.yml git commit -m "Add CI pipeline" git push
푸시하면 GitHub이 새 워크플로를 자동으로 감지합니다. Actions 탭에서 실행을 확인하거나 Run workflow 버튼을 통해 수동으로 트리거할 수 있습니다.
워크플로 실행
git push origin main
GitHub 리포지토리에서 “Actions” 탭으로 이동하세요. 워크플로가 시작되는 것을 볼 수 있습니다. 원이 녹색으로 바뀌면 코드는 안전한 것입니다. 원이 빨간색으로 바뀌면 빌드가 깨진 것이며, 다행히도 사용자가 겪기 전에 이를 알게 된 것입니다.
샘플 설정: ci.yml
