ABOUT ME

-

Total
-
  • Spring boot: Github Action CI에 JaCoCo + CodeCov
    컴퓨터/JAVA 2023. 12. 3. 18:32
    728x90
    반응형

    할 것: Github Action을 이용하여 JaCoCo 테스트 커버리지 결과를 CodeCov 하는 과정 CI를 만들 것이다.

     

    필요:

     

    Codecov - The Leading Code Coverage Solution

    Code coverage reporting solution for any test suite — Codecov gives developers actionable insights to deploy reliable code with confidence.

    about.codecov.io

    위 사이트에 로그인해서 레포지토리를 선택한다.

    그리고 CODECOV 토큰을 받아서 Github 설정 secret에 넣어준다.

     

    Github Action CI

    최상위 폴더에서 java라는 폴더에 스프링 부트 프로젝트가 있다.

    거기서 test 파일들만 변할 때 트리거 + 수동 트리거를 설정했다.

    secret 파일은 base64로 인코딩 해서 깃헙 secret에 넣어놨다. (https://www.convertstring.com/ko/EncodeDecode/Base64Encode)

    name: Verify Test Cases with Codecov
    
    on:
      push:
        branches: [main]
        paths:
          - "java/src/test/**/*"
          # - "java/**/build.gradle*"
          # - "java/**/settings.gradle*"
      workflow_dispatch:
    
    permissions:
      contents: read
    
    jobs:
      jacoco_codecov:
        runs-on: ubuntu-latest
        defaults:
          run:
            working-directory: java
        timeout-minutes: 10
        steps:
          - uses: actions/checkout@v4
          - name: Set up JDK 17
            uses: actions/setup-java@v3
            with:
              java-version: "17"
              distribution: "corretto"
    
          - name: Setup secrets
            run: |
              echo "${{ secrets.APPLICATION_YML }}" | base64 --decode > src/main/resources/application-secret.yml
              echo "${{ secrets.APPLICATION_TEST_YML }}" | base64 --decode > src/main/resources/application-secret-github.yml
    
          - name: Correct permission
            run: chmod +x gradlew
    
          - name: Build with Gradle
            run: ./gradlew build -x test
    
          - name: Run JacocoTest
            run: ./gradlew clean test jacocoTestReport
    
          - name: Upload coverage to Codecov
            uses: codecov/codecov-action@v3
            with:
              token: ${{ secrets.CODECOV_TOKEN }}
              files: build/reports/jacoco/test/jacocoTestReport.xml
              fail_ci_if_error: true

     

    build.gradle

    아래와 같이 테스트가 필요 없는 것들은 빼주고 codecov에 업로드하기 위해 xml을 활성화해준다.

    plugins {
        id 'java'
        ...
        id 'jacoco'
    }
    
    jacoco {
        toolVersion = "0.8.11"
    }
    
    jacocoTestReport {
        reports {
            xml.required = true
            csv.required = false
            html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
        }
    
        afterEvaluate {
            classDirectories.setFrom(files(classDirectories.files.collect {
                fileTree(dir: it, exclude: [
                        // List of patterns to exclude
                        'app/package/aop/**',
                        'app/package/config/**',
                        'app/package/error/**',
                        'app/package/domain/**',
                        'app/package/dto/**',
                        'app/package/repository/**'
                ])
            }))
        }
    }

     

    테스트를 만들고 업로드하면 CI가 돌아가고 codecov 사이트에서 확인 가능하다.

     

    코드 커버리지에 첫 업로드 후 Settings - Badges에 들어가면 마크다운에 넣을 수 있는 배지도 준다.

    %는 알아서 업데이트된다.

     

    728x90

    댓글