Owl Life

Jenkins에 checkstyle plugin 적용하기 본문

Jenkins

Jenkins에 checkstyle plugin 적용하기

Owl Life 2019. 10. 25. 23:15
반응형

프로그래밍하면서 코드 스타일을 체크해주는 유용한 플러그인으로 많은 개발자들이 사용하고 있습니다. 본 포스팅에서는 Android Project에 checkstyle plugin을 적용 후 젠킨스에도 결과를 보여주도록 적용해보겠습니다.

 

Lint 그래프 아래쪽에 Checkstyle Trend가 표시되는것을 볼 수 있습니다. 

 

 

차트를 클릭하면 상세 내용을 확인 할 수 있습니다.

해당 항목을 클릭하면 어떤 부분 때문에 검출이 되었는지 확인 할 수 있습니다. 본 검출 내용은 메서드 이름은 소문자로 시작하여야 하는데 대문자로 시작했기 때문에 발생된 에러입니다.

 

Android 프로젝트에 checkstyle 적용

프로젝트가 한개일 경우에는 app/build.gradle 파일에 적용하면 되고, 여러개의 멀티 프로젝트를 운용하고 있다면 root build.gradle 파일에 아래처럼 추가합니다. checkstyle이라는 태스크를 모든 프로젝트에 적용한다는 의미로 allprojects scope에 추가하였습니다.

apply plugin: 'checkstyle'
allprojects {
    repositories {
        google()
        jcenter()
    }

    task checkstyle(type: Checkstyle) {
        showViolations true
        ignoreFailures true
        configFile file(rootDir.path + "/checkstyle.xml")

        source 'src/main/java'
        include '**/*.java'
        exclude '**/gen/**'
        exclude '**/R.java'
        exclude '**/BuildConfig.java'

        classpath = files()
    }
}

 

lint와 마찬가지로 checkstyle을 커스텀하여 어떤 항목들을 검출할지 수정이 가능합니다. checkstyle.xml 이라는 파일을 생성후 프로젝트 root에 위치시킵니다. 해당 파일은 이전에 추가한 task의 "configFile file(rootDir.path + "/checkstyle.xml")" 에서 읽어옵니다.

<?xml version="1.0"?><!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

<module name="Checker">
    <module name="NewlineAtEndOfFile" />
    <module name="FileLength" />
    <module name="FileTabCharacter" />

    <module name="RegexpSingleline">
        <property name="format" value="\s+$" />
        <property name="message" value="Line has trailing spaces." />
    </module>

    <module name="TreeWalker">
        <module name="JavadocStyle" />
        <module name="ConstantName" />
        <module name="LocalFinalVariableName" />
        <module name="LocalVariableName" />
        <module name="MemberName" />
        <module name="MethodName" />
        <module name="PackageName" />
        <module name="ParameterName" />
        <module name="StaticVariableName" />
        <module name="TypeName" />
    </module>
</module>

 

checkstyle에서 제공하는 모든 규칙들은 아래 페이지에서 확인 가능합니다.

https://checkstyle.sourceforge.io/checks.html

 

실행

checkstyle task 를 실행하여 바로 결과를 확인 할 수 있습니다.

~/AndroidStudioProjects/JenkinsTestProject2$ ./gradlew clean checkstyle

> Task :app:checkstyle
[ant:checkstyle] [ERROR] /home/allsoft/AndroidStudioProjects/JenkinsTestProject2/app/src/main/java/com/owllife/jenkinstestproject/MainActivity.java:15:18: Name 'TestCheckStyle' must match pattern '^[a-z][a-zA-Z0-9]*$'. [MethodName]
Checkstyle rule violations were found. See the report at: file:///home/allsoft/AndroidStudioProjects/JenkinsTestProject2/app/build/reports/checkstyle/checkstyle.html
Checkstyle files with violations: 1
Checkstyle violations by severity: [error:1]

Jenkins에 checkstyle plugin 적용

젠킨스 홈에서 관리 페이지에 접근 후 plugin 관리쪽으로 진입합니다. 상단에서 "Checkstyle Plug-in" 으로 검색 후 설치하고 젠킨스를 재시작합니다. 그 다음 워크스페이스의 설정 화면으로 진입후 하단에 위치한 Post-build Actions 섹션에서 "Publish checkstyle ...." 항목을 선택하고 report 파일의 경로를 작성해줍니다. html은 안되고 꼭 xml 파일 형식으로만 작성하여야 합니다.

 

 

현재 기점으로 해당 액션은 deprecated 되었고, Report Violation 을 사용하여야 하는데 이 부분은 차후에 다시 다루어 보도록 하겠습니다.

반응형
Comments