1. Github Actions를 선택한 이유
Github Actions는 Github에서 제공하는 CI/CD 툴로 Github가 서버를 제공해주기 때문에 따로 서버를 구성하지 않아도 되고, YAML 기반 워크플로우 파일을 작성해 push, pull request 등의 이벤트를 트리거로 하여 다양한 작업을 자동으로 수행할 수 있습니다.
또한 다양한 액션들을 제공해 손쉽게 CI를 구성할 수 있어 Github Actions를 선택하게 되었습니다.
2. Github Actions기본 용어
Workflow
자동화된 프로세스를 정의하는 YAML 파일 github/workflows 디렉토리에 위치하며 특정 이벤트가 발생할 때 실행됩니다.
Event
워크플로우를 트리거하는 활동들을 의미합니다.(push, pull request 등)
Job
Workflow 내에서 실행되는 작업의 단위로 독립적으로 실행되며 각 잡은 여러 스탭을 포함할 수 있습니다.
Step
Job 내에서 실행되는 개별 명령어 또는 작업으로 순차적으로 실행됩니다.
Action
Step에서 실행되는 재사용 가능한 명령어세트로 github에서 다양한 액션들을 제공하고 있고, 자신만의 액션을 정의해 사용할 수 있습니다.
Runner
Workflow를 실행하는 서버
3. Workflow 작성
.github/workflows 디렉토리 안에 아래와 같은 Workflow 설정 파일을 만들어줍니다.
name: Doridos Backend CI
on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop
permissions:
checks: write
pull-requests: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: checkout source
uses: actions/checkout@v3
- name: JDK 11설정
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
- name: Gradle 의존성 캐싱
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Gradlew 권한 설정
run: chmod +x ./gradlew
- name: 테스트 진행
run: ./gradlew test
- name: 테스트 결과를 코멘트 등록
uses: EnricoMi/publish-unit-test-result-action@v2
if: ${{ always() }}
with:
files: '**/build/test-results/**/*.xml'
- name: 테스트 실패 코멘트 등록
uses: mikepenz/action-junit-report@v3
if: always()
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop
main 또는 develop 브랜치로 push가 되거나 pull request 요청이 일어나면 Workflow를 실행합니다.
jobs:
build:
runs-on: ubuntu-latest
workflow가 실행될 서버를 지정해줍니다.
- name: JDK 11설정
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
- name: Gradle 의존성 캐싱
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Gradlew 권한 설정
run: chmod +x ./gradlew
- name: 테스트 진행
run: ./gradlew test
자바 버전과 어떤 JDK 이용할지 설정하고 CI속도를 높이기 위해 의존하는 라이브러리를 캐싱합니다. 이 후 테스트를 실행하게 됩니다.
이렇게 워크플로우를 작성하면 해당 브랜치에 push, pull_request가 발생할 때마다 해당 워크플로우가 실행되게 됩니다. 실행 결과와 테스트 결과는 Github Actions 탭에서 확인할 수 있습니다.
워크플로우가 수행되고 테스트 결과 코멘트 또한 정상적으로 등록되는 것을 볼 수 있습니다.
'Backend > 프로젝트' 카테고리의 다른 글
스프링에서 동시성 문제 해결하기(낙관적 락, 비관적 락) (0) | 2024.08.14 |
---|---|
QueryDsl을 활용한 카테고리별 조회(페이징) 기능 만들기 (0) | 2024.07.30 |
Spring Security + jwt + OAuth2(소셜 로그인 2편) (0) | 2024.06.30 |
OAuth란 무엇인가? (소셜 로그인 1편) (0) | 2024.06.17 |
모니터링 시스템 구축(1) Prometheus, Actuator 구성하기 (0) | 2024.06.13 |