1. dev 브랜치에 푸시하거나 PR보낼때마다 CI check
on:
push:
branches: [ "dev" ]
pull_request:
branches: [ "dev" ]
2. PR에 테스트 결과 코멘트로 알려 줄 때 필요한 허가.
permissions:
checks: write
pull-requests: write
3. 레포지토리 체크아웃
레포지토리의 코드를 runner 컴퓨터에서 돌려볼 수 있도록 pull로 땡겨가는 코드.
- name: 레포지토리 체크아웃
uses: actions/checkout@v3
4. 현재 내가 사용하는 Spring Boot는 3.x버전은 Java 17부터 지원하기 때문에 JDK 17 설치
- name: JDK 17 설치
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
5. Gradle 실행 허가
- name: Gradle 실행 허가
run: chmod +x ./gradlew
6. Build With Gradle
- name: Build with Gradle
uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
with:
arguments: build
※ 테스트 코드가 없을 시 이렇게 작성하면 된다.
- name: Build with Gradle
run: ./gradlew clean build --exclude-task test
7. 테스트 결과 PR에 코멘트 작성
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: |
**/build/test-results/**/*.xml
8. PR 어디가 틀렸는지 알려주는 기능(file changed에서 알 수 있다.)
- name: Publish Test Report
uses: mikepenz/action-junit-report@v3
if: success() || failure() # always run even if the previous step fails
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
버전이 안맞을 때는 uses를 참고하여 구글링해보면 해당 기능을 구현해놓은 깃허브에 들어갈 수 있고, 깃허브 README 에 어떻게 작성해야 하는지 다 가르쳐준다...! 구글링해서 적용시켰을 때 해당 부분에서 실패하면 공식 깃허브를 들어가서 버전이 바뀌지는 않았는지 체크해보자.
Mockito를 이용한 Test는 어플리케이션을 실행시키지 않기 때문에 이 코드로 해도 CI를 적용시킬 수 있으나 Spring Boot Test의 경우 어플리케이션을 실행시키고 테스트를 해보는 것이기 때문에 DB연결 코드가 추가적으로 더 필요하다.
전체 코드
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
name: develop CI check
on:
push:
branches: [ "dev" ]
pull_request:
branches: [ "dev" ]
permissions:
checks: write
pull-requests: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 레포지토리 체크아웃
uses: actions/checkout@v3
- name: JDK 17 설치
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
# gradle 실행 허가
- name: Run chmod to make gradlew executable
run: chmod +x ./gradlew
# build Test
- name: Build with Gradle
uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
with:
arguments: build
# run: ./gradlew clean build --exclude-task test (테스트 코드 없을때)
# PR conversation & Action에 몇 개의 테스트 중에 몇 개가 통과 되었는지
# 어떤 테스트 파일에서 실패했는지 가르쳐 줌.
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: |
**/build/test-results/**/*.xml
# 테스트 파일 내에서 어디에서 테스트가 실패되었는지 가르쳐 줌.
# Files changed에서 어디에서 잘못되었는지 가르쳐준다.
- name: Publish Test Report
uses: mikepenz/action-junit-report@v3
if: success() || failure() # always run even if the previous step fails
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
'STUDY > GIT' 카테고리의 다른 글
[TIL] Git Rebase를 사용해서 일 효율 높이기! (0) | 2023.11.11 |
---|---|
[TIL] Github Action으로 DB 연동! - Spring Boot Test 통과 확인 (0) | 2023.08.10 |
[TIL] Github Action 2 - Workflow 구성해보기(작성 중) (0) | 2023.08.01 |
[TIL] Github Action이란? CI/CD에 대해 (0) | 2023.07.28 |
[Git] fork가 아니라 같은 Repo의 Collaborator일 때, Pull Request 방법 기록(레포지토리 파는 사람 / Collaborator) (1) | 2023.07.17 |