PR을 하여 main 브랜치로 Merge를 할 때, 해당 코드가 이상이 없는지 매번 검사하기 번거롭다.
그래서 GitHub Actions
에서 테스트 코드를 자동으로 실행하여 해당 코드가 문제 없는지 확인하도록 할 수 있다.
또한 테스트를 완료한 코드는 비교적 안심할 수 있는 코드이므로 배포 시 오류 발생을 낮출 수 있다.
우선 GitHub Actions
를 사용하려는 레포지토리에서
Settings
-> Actions
-> General
로 들어가 GitHub Actions
를 설정해줄 것이다.
Actions permissions
는 Allow all actions and reusable workflows
로 설정해준다.
Workflow permissions
에서 Read and write permissions
로 설정하여, PR Comment로 테스트 결과가 작성되도록 허용한다.
GitHub Actions
로 레포지토리에 접근하기 위해서는 GitHub Access Token
이 필요하다.
토큰값을 하드 코딩하면 보안에 문제가 있을 수 있기 때문에, 토큰 값은 Secret 값으로 환경 변수처럼 등록한 후 사용할 것이다.
GitHub Actions
를 사용하려는 레포지토리에서
Settings
-> Secrets and variables
-> Actions
-> New repository secret
를 클릭하여 환경 변수를 만들어주자.
Name
에는 환경변수에 이름을 적어준다.
Secret
에는 발급받은 GitHub Access Token
을 넣어주고, Add secret
을 클릭하여 환경 변수를 만들어주자.
${{ secrets.환경_변수_이름 }}
으로 스크립트에 추가하면 등록된 값을 불러올 수 있다.
프로젝트 루트 경로에 ./.github/workflows
디렉토리에 .yaml
파일을 만든다.
name: PR 시 CI 테스트 자동화
on:
pull_request:
branches:
- main
jobs:
test:
name: Test
runs-on: ubuntu-latest
permissions:
checks: write
pull-requests: write
steps:
- name: 레포지토리 체크아웃
uses: actions/checkout@v4
with:
token: ${{ secrets.GIT_TOKEN }}
- name: JDK 17 설치
uses: actions/setup-java@v3
with:
distribution: 'oracle'
java-version: '17'
- name: Gradle 명령 실행 권한 부여
run: chmod +x ./gradlew
shell: bash
- name: Gradle로 프로젝트 Build
run: ./gradlew build
- name: 테스트 결과를 PR 코멘트로 출력
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: '**/build/test-results/test/TEST-*.xml'
- name: 테스트 실패 시, 오류가 발생한 코드 라인에 코멘트 추가
uses: mikepenz/action-junit-report@v4
if: always()
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
- name:
밑에uses
에는name
처럼-
를 추가하시면
위와 같은 에러가 발생합니다.
이건 문법 오류이기 때문에 아예 실행조차 안돼요...
(제가 이거 때문에 시간을 많이 잡아먹었네요...ㅠ)
조금 기다리면 이렇게 해당 PR의 Comment로 테스트 결과가 나온다.
JUnit Test Report
를 확인해보면 어떤 코드에서 실패했는지 확인할 수 있다!
여기서 ANNOTATIONS
밑에 Check failure on line ...
을 클릭하면 코드와 함께 자세히 알 수 있다.
어느 코드에서 에러가 났고, 무엇이 문제인지 확인할 수 있어 편리하다!
이처럼 테스트는 실패
했지만, Merge
는 가능하여 테스트를 실패한 코드가 Merge
될 수 있다!
그럼 테스트를 성공할 때만 Merge
할 수 있게 설정해보자!
GitHub Actions
를 사용하는 레포지토리에서 Settings
-> Branches
-> Add branch ruleset
을 클릭하여 브랜치 룰을 생성해보자!
브랜치 룰의 이름을 설정해주고, Enforcement status
를 Disabled
에서 Active
로 바꾸어 해당 룰셋을 활성화 해주자!
Target branches
는 해당 룰을 적용하고 싶은 브랜치로 Add target
을 클릭하여 설정해주자.
ex) main, dev 등등
아래로 더 내려서 Require status checks to pass
를 체크하고 그 아래 Require branches to be up to date before merging
을 체크하여, 최신 코드가 통과해야 Merge
가 될 수 있게 한다.
Status checks that are required
에서 + Add checks
를 눌러 GitHub Actions
의 Jobs
를 추가해준다.
해당 Jobs
가 모두 통과해야 Merge
할 수 있다!
이제 해당 룰을 저장해준다.
이제 테스트가 실패할 땐, Merge
가 되지 않는다!
테스트가 성공하면 Merge
할 수 있다!
카카오웹툰은 GitHub Actions를 어떻게 사용하고 있을까? | Kakao FE기술블로그
Github Actions 를 이용한 CI 테스트 자동화 | 리차드
Github Action으로 CI 파이프라인 구성하기 | 짭조름하게
setup-java | github
Github Actions로 PR 테스트 자동화를 진행하면서 했던 삽질 | 호야