[CI/CD] GitHub Actions를 이용한 자동 테스트

General Dong·2024년 10월 29일
0

CI/CD

목록 보기
5/12
post-thumbnail

PR을 하여 main 브랜치로 Merge를 할 때, 해당 코드가 이상이 없는지 매번 검사하기 번거롭다.
그래서 GitHub Actions에서 테스트 코드를 자동으로 실행하여 해당 코드가 문제 없는지 확인하도록 할 수 있다.
또한 테스트를 완료한 코드는 비교적 안심할 수 있는 코드이므로 배포 시 오류 발생을 낮출 수 있다.

Repository Actions 활성화

우선 GitHub Actions를 사용하려는 레포지토리에서
Settings -> Actions -> General로 들어가 GitHub Actions를 설정해줄 것이다.

Actions permissionsAllow all actions and reusable workflows로 설정해준다.

Workflow permissions에서 Read and write permissions로 설정하여, PR Comment로 테스트 결과가 작성되도록 허용한다.

GitHub Access Token 환경 변수로 등록

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 Actions 파일 생성

프로젝트 루트 경로에 ./.github/workflows 디렉토리에 .yaml 파일을 만든다.

CI 스크립트

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 ...을 클릭하면 코드와 함께 자세히 알 수 있다.

어느 코드에서 에러가 났고, 무엇이 문제인지 확인할 수 있어 편리하다!

테스트를 통과한 PR만 Merge 가능하게 설정

이처럼 테스트는 실패했지만, Merge는 가능하여 테스트를 실패한 코드가 Merge 될 수 있다!
그럼 테스트를 성공할 때만 Merge 할 수 있게 설정해보자!

GitHub Actions를 사용하는 레포지토리에서 Settings -> Branches -> Add branch ruleset을 클릭하여 브랜치 룰을 생성해보자!

브랜치 룰의 이름을 설정해주고, Enforcement statusDisabled에서 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 ActionsJobs를 추가해준다.
해당 Jobs가 모두 통과해야 Merge할 수 있다!

이제 해당 룰을 저장해준다.

이제 테스트가 실패할 땐, Merge가 되지 않는다!

테스트가 성공하면 Merge할 수 있다!


참고

카카오웹툰은 GitHub Actions를 어떻게 사용하고 있을까? | Kakao FE기술블로그
Github Actions 를 이용한 CI 테스트 자동화 | 리차드
Github Action으로 CI 파이프라인 구성하기 | 짭조름하게
setup-java | github
Github Actions로 PR 테스트 자동화를 진행하면서 했던 삽질 | 호야

profile
개발에 대한 기록과 복습을 위한 블로그 | Back-end Developer

0개의 댓글