[Video Summary]GitHub Actions로 CI/CD 환경을 만들어보자
detekt: a static code analysis linter tool for Kotlin Android projects!
이번 포스팅에서는 이전에 다룬 CI/CD와 DevOps 및 안드로이드 앱 개발의 CI/CD 개요를 실제 환경에서 구현해보는 실습을 해보겠습니다. 여기서는 GitHub Actions 를 사용해보겠습니다.
이전 포스팅
본 내용은 아래 유튜브 강좌를 통해 학습한 내용을 정리한 것입니다.
요약
detekt: a static code analysis linter tool for Kotlin Android projects!
https://github.com/detekt/detekt
Detekt 는 Kotlin 프로젝트를 위해 Kotlin 에서 개발한 Linter 도구로 코드 품질을 담당합니다.
- 추가 플러그인을 통해 ktlint 기반의 포메팅을 지원하는 의존성을 추가할 수 있습니다.(문서)
(ktlint는 코드 형식 지정을 담당합니다.)
Kotlin 컴파일러에서 제공하는 추상 구문 트리에서 작동하는 정적 코드 분석 도구이다.
이 라이브러리는 아래와 같은 것을 찾아내래 수 있습니다.
잠재적인 코드 냄새
잠재적인 버그
잠재적인 성능 문제
잠재적인 보안 문제
코드 복잡성
휴먼 에러
Detekt 에는 전체 프로젝트에 걸쳐 정의할 수 있는 고도로 구성 가능한 규칙이 있다.
이런 규칙은 팀에 대한 기본 규칙을 정의하여 새로운 팀 구성원의 온보딩을 더 쉽게 만든다.
Detekt 는 CLI, Gradle plugin, 코딩 중 즉각적인 피드백을 표시하는 IntelliJ 플러그인이 있다.
또한 내부적으로 ktlint를 래핑하고 사람이 읽을 수 있는 HTML 보고서나 구문 분석을 위한 XML 보고서를 생성할 수 있다.
보고서는 경고 및 오류로 제공되며 더 높은 우선순위부터 해결해야 한다.
모든 규칙을 활성화하고 프로젝트의 기준선을 정의하여 CI 검사에서 이를 수행할 수 있다.
GitHub Actions | Detekt | Android | 2023
만약 회사에서 하나의 파일 내에 100 줄 이상의 코드를 작성하지 않기로하고 또 5개 이상의 메서드를 하나의 클래스 내에 작성하지 않기로 했다고 합시다. 그럼 이런 규칙을 검토하는 것은 번거로운 일이 될 것이고 이를 정적 분석 툴로 대신할 수 있습니다.
인덴트 사이즈 규칙, 한 줄당 최대 글자 수 등 많은 것을 설정할 수 있습니다. 설정 가능한 내용은 문서를 참고 (문서)
사용법
프로젝트와 모듈에 detekt 의존성 추가
gradle app:detekt 명령 실행 -> 많은 에러 발생
app - build - reports - detekt 경로에가면 에러 로그를 볼 수 있음
에러가 발생하는 이유는 base 라인을 정하지 않았기 때문이다.
- 현 시점에서 베이스라인을 생성하면, 현재 발생하는 모든 오류 목록을 가지는 파일을 만들고 다음 테스팅 시 베이스라인에 선언된 에러는 에러를 발생시키지 않는다.
gradle app:detektBaseline 명령 실행 -> 발생했던 에러 목록 파일 생성
다시 gradle app:detekt 명령 실행 -> 에러가 발생하지 않음
한 줄에 기본 설정 MaxLineLength 보다 긴 코드를 작성하고 다시 테스팅하면 베이스 라인에 없던 에러가 발생한다
- ...MainActivity.kt:22:1: Line detected, which is longer than the defined maximum line length in the code style. [MaxLineLength]
기본 값을 커스텀하여 팀에서 요구하는 설정을 만들자
gradle :app:detektGenerateConfig 수행
- /config/detekt/detekt.yml 파일 생성 (기본 규칙이 정의된 파일)
maxLineLength를 220 으로 설정하고 테스트하면 이전에 발생한 에러가 발생하지 않는다.
이 정적 도구 분석을 메인 브랜치에 PR 생성 시 자동으로 수행되게 할 것이다.
- 먼저 GitHub Actions 를 알아야 한다.
프로젝트에 Github Actions 를 설정하자
root 밑에 .github 폴더 생성
.github/ 에 workflow 폴더 생성
workflow/ 에 detekt-actions.yml 파일 생성
워크 플로우를 해당 파일에 명세 후 push
이제 다른 브랜치로 이동해 테스트한다
test-branch 생성
변경 사항 작성 후 push
PR 생성
자동으로 Github Actions 가 동작되어 PR 에서 진행 상황을 볼 수 있다.