모종닷컴

Github Action에서 Gradle Build 에러 리포트 파일 받아보기 본문

Programming

Github Action에서 Gradle Build 에러 리포트 파일 받아보기

모종 2023. 4. 16. 23:02
반응형

Github Action CI 

Github Action CI를 사용하다 보면 빌드 혹은 테스트가 실패할 때가 있습니다. 이때 Gradle은 좀 더 상세한 실패 내용을 index.html로 만들어 제공해 줍니다. 이렇게 만들어진 파일을 무척이나 보고 싶은데 워크플로 데이터라서 접근하는 것이 어렵습니다.

 

빌드 실패 시 위 파일을 그냥 Cat 해버릴까?

가장 처음 생각했던 방법은 단순하게 그냥 위 html을 cat 명령어로 내용을 노출시키고 그걸 복사해서 보면 되지 않을까 싶었습니다. 그래서 아래와 같이 빌드가 실패했을 경우 해당 파일을 Cat 하도록 스텝을 추가해 봤습니다.

이렇게 하니 Html 내용을 그래도 볼 수 있었는데, 복사해놓고 보니 중간중간 href로 참조하고 있는 파일들이 있다는 걸 알았습니다. 

 

그리고 막상 생각해 보니 현재는 user 모듈에서 오류가 났기에 경로가 ~~/user/build/reports/tests/test/index.html 이런 식이지만 후에 다른 모듈들이 늘어나고 해당 모듈에서 오류가 난다면 위 경로가 계속 달라지기 때문에 위의 방법은 적절하지 못해 보였습니다.

디렉터리 패턴을 검색해서 전부 다 가져오기

다음으로 생각했던 방법은 디렉터리 패턴을 검색하는 것입니다. 모듈이 어떻든 결국에는 경로가  "~~~/build/reports/tests/test"디렉터리에 index.html 파일이 생성되게 됩니다.

따라서 애플리케이션 루트 디렉터리에서 하위 디렉터리의 "*/build/reports/tests/test"의 패턴의 경로에 있는 파일들을 다 복사하면 될 것 같습니다.

아래와 같이 step을 추가하면 report_files 밑에 각 모듈 별로 생성된 파일들을 모두 모아서 압축시킬 수 있습니다.

  - name: Compress all report files
    if: ${{ failure() }}
    run: |
      echo "Compressing all report files..."
      TIMESTAMP=$(date +%Y%m%d_%H%M%S)
      mkdir report_files
      REPORT_DIRS=$(find . -type d -path '*/build/reports/tests/test')
      for dir in $REPORT_DIRS; do
        module_path=$(echo $dir | awk -F'/build/' '{print $1}' | cut -c 3-)
        cp -r $dir report_files/$module_path/$(basename $(dirname $dir))
      done
      tar czvf report_files_$TIMESTAMP.tar.gz report_files

 

압축된 파일을 어떻게 가져올 수 있을까?

이번 포스팅의 핵심인 부분이 돌아왔네요. 결국엔 그래서 이 파일을 어떻게 가져올 수 있을까 하고 구글링을 했을 때 Github Action의 Artifacts라는 것을 알게 되었습니다. 이를 이용하면 워크플로가 실행되면서 생성된 파일을 가져올 수 있습니다. 

사용이 굉장히 쉬운데 아래와 같이 설정하면 됩니다. Artifacts에 올릴 때 파일명이 name이고, 업로드할 파일을 path에 적어주시면 됩니다.

  - name: Upload Error Report Files To Artifacts
    if: ${{ failure() }}
    uses: actions/upload-artifact@v2
    with:
      name: report_files
      path: report_files_*.tar.gz

이렇게 했을 때 그럼 Artifact에 업로드된 파일은 어떻게 접근할 수 있냐면 실행된 Workflow의 Summary 탭으로 들어가시면 됩니다. 레포지토리 상단 메뉴에서 Actions 탭에 들어가서 실패한 workflow를 선택합니다.

좌측 메뉴 중 Summary를 누르고 난 후 아래로 내려보면 아래와 같이 Artifacts 파일이 보일 겁니다. 이 파일을 클릭한 후 압축을 풀어주면 됩니다.

 

 

반응형