일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬 소스
- 오라클 디비
- 자바 프로젝트
- spring
- auto configure
- SQL
- 프로젝트
- c#
- 유사코드
- MongoDB
- 오라클
- 파이썬
- 티스토리
- resilience4j
- 리눅스
- dynamic query
- 문법 정리
- smart cast
- 운영체제
- gradle
- 초대장
- 학점
- JVM
- jsp
- 알고리즘
- hyperledger
- 백준 알고리즘
- K6
- 자바
- oracle
- Today
- Total
모종닷컴
Github Action에서 Gradle Build 에러 리포트 파일 받아보기 본문
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 파일이 보일 겁니다. 이 파일을 클릭한 후 압축을 풀어주면 됩니다.
'Programming' 카테고리의 다른 글
Kotlin Contract (0) | 2023.07.28 |
---|---|
Git Commit 전에 스크립트를 통해 포맷 체크하기 (0) | 2023.04.23 |
Reactor3's SwitchIfEmpty with lazy evaluation.. (0) | 2023.03.10 |
Reactive Streams & Reactive Programming (0) | 2023.02.18 |
SQS 중복 수신 이슈 (0) | 2022.12.24 |