PR 시 해당 커밋이 반영될때 빌드 가능함을 확인할 수 있다면, Merge 시킬지 여부를 판단할 수 있는 좋은 지표가 될 것입니다.
따라서 저는 GitHub Action을 사용하여 Reach Rich 프로젝트에 PR 시 빌드시키는 Action을 추가하여 성공, 실패 여부를 확인 가능하게 구현하려 합니다.
Yaml과 같은 특정 Config 파일에는 서버 도메인, 계정명, 비밀번호 등 보안상 취약한 데이터가 존재합니다.
따라서 레파지토리에는 push하면 안되므로 gitignore을 사용합니다.
그렇다면 저장소에는 Config 파일이 존재하지 않기 때문에 빌드에서 에러가 발생할 것입니다.
이는 GitHub의 Secret에 작성해놓고 GitHub Action 수행 시 Write 작업을 수행하여 해결할 수 있습니다.
위와 같이 Yaml 파일들을 Secret에 작성합니다.
CI에 사용될 GitHub Action Yaml 파일은 다음과 같습니다.
name: CI
on:
pull_request:
branches: [ "develop" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
# 체크아웃
- name: checkout
uses: actions/checkout@v3
# JDK version 설정
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
## 그래들 캐싱
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# Config 파일 Write
- name: make env file
run: |
# main 설정 파일 디렉토리로 이동
cd ./src/main/resources
# application-mysql.yml
touch ./application-mysql.yml
echo "${{secrets.CI_APPLICATION_MYSQL}}" >> ./application-mysql.yml
# application-redis.yml
touch ./application-redis.yml
echo "${{ secrets.CI_APPLICATION_REDIS }}" >> ./application-redis.yml
shell: bash
# Gradle build
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build Gradle wrapper
run: gradle wrap
- name: Build with Gradle
run: ./gradlew build
shell: bash
순서대로 설명하면,
와 같은 과정으로 이루어집니다.
이제 간단하게 develop에서 새로운 브랜치를 파서 간단하게 리드미를 수정 후 PR을 올리면..
위와 같이 CI Action을 수행합니다.
빌드에 성공하면 "All checks have passed" 문구가 표시됩니다.
이제 PR 공간에서 해당 브랜치를 반영하면 빌드에 성공할 수 있는지 간편하게 확인할 수 있습니다!
다음 포스팅에선 Docker를 이용한 CD 구축으로 찾아뵙겠습니다~