개요
쇼핑몰 프로젝트를 진행하면서 처음에는 Jenkins를 이용해 CI/CD 환경을 구성했습니다. 하지만 AWS 프리 티어를 사용하다보니 메모리 부족으로 인한 오류 등 간헐적으로 문제가 발생했습니다. 이러한 문제를 해결하기 위해 Github Actions로 전환하기로 결정했습니다.
Github Actions는 공개 레파지토리에 대한 무료 사용을 제공하므로 비용적으로 효율적인 솔루션입니다. 또한 프로젝트와 인프라의 규모를 고려할 때 Github Actions를 사용해도 문제가 없다고 판단했습니다.
워크플로 정의
프로젝트 최상단에 .github/workflows 폴더를 생성 후 yml 파일을 생성합니다.
# github-actions.yml
name: potato-mall-ci
on:
push:
branches:
- main
permissions:
checks: write
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: gradle
- name: Verify JDK installation
run: java -version
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v3
with:
gradle-version: '8.7'
- name: Build with Gradle
run: ./gradlew build -Djasypt.encryptor.password=${{secrets.JASYPT_PASSWORD }}
- name: Publish Test Results
uses: mikepenz/action-junit-report@v4
if: always()
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
include_passed: true
on :
main 브랜치에 push 이벤트가 발생하면 아래의 jobs를 실행
다른 브랜치도 가능하며, push 외에 pr 등 다른 이벤트도 등록 가능
permissions:
action-junit-report@v4를 사용하기 위한 권한 설정
runs-on:
실행된 인스턴스 OS 및 버전
Checkout code
Repository로 부터 Code를 Checkout
Set up JDK 17
JDK17를 설치
Set up Gradle
gradle 빌드 환경 설치 및 세팅
Build with Gradle
gradle을 이용해 프로젝트를 build
Github Secrets를 이용해 민감한 변수를 등록 가능
Publish Test Results
테스트 코드의 실행 결과를 시각화
Github Secrets
프로젝트 -> Settings -> Secrets and variables -> Actions -> New repository secret을 통해 변수를 등록할 수 있다.
등록한 변수는 ${{ secrets.XXXX }}를 통해 Github Actions에서 사용 가능하다.
주로 API 계정 정보, DB 계정 정보 등 Github에 올라가면 안되는 변수들에 사용할 수 있다.
적용 결과
프로젝트의 Actions 탭에서 결과를 확인할 수 있다.
빌드 및 테스트 결과를 시각화해서 볼 수 있다.