
CI 오류를 해결해서 이제는 코드 병합 전에 빌드나 테스트에 문제가 있는지 확인하고 코드 병합을 할 수 있습니다.
현재는 PR을 올리고 CI가 성공하기까지 3분 10초라는 시간이 걸리고 있는데 지금은 프로젝트의 규모가 크지 않아 큰 문제가 되지는 않지만 만약 프로젝트 규모가 크고 자주 PR이 발생할 경우에는 코드 병합까지 더 오랜 시간이 소요되게 됩니다.
또, CI가 실패했을 때에는 Actions 탭에 들어가서 실패한 이유를 별도로 확인해야 하는데 이 과정은 번거롭고 비효율적입니다.
위의 이유들로 성능 개선 작업이 필요하다고 판단하였습니다.
현재는 build와 test가 한 Job 내에서 실행되면서 빌드가 성공해야지만 테스트가 실행되고 있습니다.
build와 test는 꼭 순차적으로 실행되어야만 하는 작업이 아니기 때문에 build와 test Job을 나누고 병렬로 진행되도록 수정했습니다.
jobs:
build:
runs-on: ubuntu-latest
steps:
# 생략
- name: Grant execute permission for Gradlew
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew build -x test
test:
runs-on: ubuntu-latest
services:
redis:
image: redis:6.2
ports:
- 6379:6379
options: >-
--health-cmd="redis-cli ping"
--health-interval=10s
--health-timeout=5s
--health-retries=5
steps:
# 생략
- name: Grant execute permission for Gradlew
run: chmod +x ./gradlew
- name: Run tests with H2 DB
env:
spring_profiles_active: test
REDIS_HOST: ${{ secrets.REDIS_HOST }}
REDIS_PORT: ${{ secrets.REDIS_PORT }}
JWT_SECRET_KEY: ${{ secrets.JWT_SECRET_KEY }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
S3_PUBLIC: ${{ secrets.S3_PUBLIC }}
S3_SECRET: ${{ secrets.S3_SECRET }}
S3_REGION: ${{ secrets.S3_REGION }}
SLACKBOT_TOKEN: ${{ secrets.SLACKBOT_TOKEN }}
LOGSTASH_HOST: ${{ secrets.LOGSTASH_HOST }}
LOGSTASH_PORT: ${{ secrets.LOGSTASH_PORT }}
run: ./gradlew test -Dspring.profiles.active=test
그 결과, build와 test가 병렬로 돌아가며 아래와 같이 실행 시간이 단축되었습니다.
또, CI이 끝나면 PR의 코멘트에 test의 결과를 자동으로 게시하도록 설정했습니다.
만약 test가 실패한 경우에는 어느 코드 라인이 문제인지도 게시하도록 설정해 개발자가 오류에 신속히 대처할 수 있도록 했습니다.
test:
runs-on: ubuntu-latest
steps:
# 생략
- name: Register test results as comments in PR
uses: EnricoMi/publish-unit-test-result-action@v1
if: always()
with:
files: '**/build/test-results/test/TEST-*.xml'
- name: If the test fails, register a Check comment in the failed code line
uses: mikepenz/action-junit-report@v3
if: failure()
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
token: ${{ github.token }}
잘 설정되었는지 확인하기 위해서 일부러 테스트 오류를 발생시키고 푸시를 진행해보았습니다.
푸시 후에 PR을 올리니 테스트가 실패하고 있음을 코멘트로 달아주고 있습니다.
해당 코멘트의 'For more details on these failures, see this check.'에서 this check를 클릭하면
다시 테스트 코드가 정상적으로 수행되도록 수정하고 푸시를 진행해보았습니다.
PR에 모든 테스트가 성공했음을 코멘트로 달아주고 있습니다.
