Spring Boot 예제 개선하기 (2)
GitHub Action
을 통해 실행된 테스트가 실패시,test reports
를 업로드하는 기능을 소개하고자 합니다.
이전 글에 이어 보다 개선된 지속적 통합을 하고자 2가지 개선이 있었다.
- 캐시 적용
- 테스트 보고
캐시 적용
GitHub Action
은 특정 경로에 대해서 캐싱할 수 있는 action을 제공하고 있다. 이에 대한 자세한 스펙과 설명은 actions/cache를 참고해볼 수 있다.
heowc/SpringBootSample에 적용할 수 있는 포인트는 두 곳이다. (적용된 코드: 7064ed1
)
gradle-wrapper
가 설치된 부분- 각 프로젝트의
build.gradle
에 정의된dependency
이 설치된 부분
꼭 Gradle이 아니더라도 다른 언어와 빌드 툴에 대한 샘플도 나열되어 있으니 참고하면 좋다.
1. gradle-wrapper
설치하는 부분
gradle-wrapper
를 사용하는 경우에는 gradle/wrapper/gradle-wrapper.properties
파일을 참고하면 현재 사용 중인 버전을 알 수 있다. 결국에는 해당 파일이 변경되었다면 버전 변경이 되었다고 판단할 수 있으므로 이를 기준으로 cache-key를 가질 수 있다.
2. build.gradle
정의된 dependency
이미 action/cache의 예시를 참고했다면 쉽게 알 수 있듯이, 이 또한 build.gradle
를 기준으로 cache-key를 가질 수 있다.
그래서 빨라졌나?
아직 히스토리로 남은 전체 워크플로우 갯수도 적고 테스트 갯수도 적어 (또한, 대부분의 워크플로우가 디펜던시 변경이기 때문에) 단정지을 순 없지만 초기에는 7분대가 보였던 것에 반해 cache를 적용한 이후에는 7분대는 거의 볼 수 없었다. 대략 10퍼센트 정도의 속도 개선이 있었다는 것을 알 수 있다.
테스트 보고
워크플로우를 보면 대략적으로 실패했다는 것을 알 수 있지만 자세히는 알 수 없다. 그래서 테스트 결과물로 나온 reports
를 어디선가 볼 수 없을까? 라는 생각과 내 주변 프로젝트는 어찌하고 있을까? 싶어 찾아보았다.
1. Armeria
요즘 라인에서 만든 Armeria
에 관심이 많아 조금씩 기여도 하고 유용한 코드 조각이 있으면 활용하는 편이다. Armeria
는 appveyor라는 CI 도구와 codecov라는 코드 커버리지 도구를 사용하는데, appveyor에서 테스트가 깨지면 file.io
서비스를 이용해 하나의 test-reports로 압축하여 업로드하고 있다.
file.io
는 무료이고 유효기간 을 지정할 수 있어 굉장히 유용한 도구이다.
2. actions/upload-artifact
최근 베타 기능으로 GitHub에서 artifact API라는 파일 업로드 기능이 추가되었고, 이 또한 action으로 활용할 수 있었다. 하지만 아쉽게도 몇 가지 문제점이 있다.
- 유효기간을 지정할 수 없어 사용량에 제한이 될 수 있다. 수동으로 제거해야한다.
- 여러 경로에 대해서 한번에 묶을 수 없다.
V2 버전에는 2번이 해결될 것으로 보이지만 아직까진 유효기간 설정에 대한 기능이 이슈로만 얘기되고 있어 file.io
를 사용하고 나중에 actions/upload-artifact
를 변경하기로 마음 먹었다. (적용된 코드: 3d43675
)
실패하는 테스트 코드 만들어 실행하기
무조건 실패하는 테스트를 만들어보고 workflow를 확인해 보았다.
@Test
void test_failure() {
assertThat(true).isFalse();
}
실패시, https://file.io/m5KLSY
에 test-report
가 업로드되고 이를 14일간 다운로드 받을 수 있다.