preview image
허원철의 개발 블로그

Spring Boot 예제 개선하기 (2)

2020-02-20

GitHub Action을 통해 실행된 테스트가 실패시, test reports를 업로드하는 기능을 소개하고자 합니다.

이전 글에 이어 보다 개선된 지속적 통합을 하고자 2가지 개선이 있었다.

  • 캐시 적용
  • 테스트 보고

캐시 적용

GitHub Action은 특정 경로에 대해서 캐싱할 수 있는 action을 제공하고 있다. 이에 대한 자세한 스펙과 설명은 actions/cache를 참고해볼 수 있다.


heowc/SpringBootSample에 적용할 수 있는 포인트는 두 곳이다. (적용된 코드: 7064ed1)

  1. gradle-wrapper가 설치된 부분
  2. 각 프로젝트의 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으로 활용할 수 있었다. 하지만 아쉽게도 몇 가지 문제점이 있다.

  1. 유효기간을 지정할 수 없어 사용량에 제한이 될 수 있다. 수동으로 제거해야한다.
  2. 여러 경로에 대해서 한번에 묶을 수 없다.

V2 버전에는 2번이 해결될 것으로 보이지만 아직까진 유효기간 설정에 대한 기능이 이슈로만 얘기되고 있어 file.io를 사용하고 나중에 actions/upload-artifact를 변경하기로 마음 먹었다. (적용된 코드: 3d43675)

실패하는 테스트 코드 만들어 실행하기

무조건 실패하는 테스트를 만들어보고 workflow를 확인해 보았다.

1
2
3
4
@Test
void test_failure() {
assertThat(true).isFalse();
}

alt workflow-log

실패시, https://file.io/m5KLSYtest-report가 업로드되고 이를 14일간 다운로드 받을 수 있다.

alt download-report