Owl Life

Jenkins에 lint plugin 적용하기 본문

Jenkins

Jenkins에 lint plugin 적용하기

Owl Life 2019. 10. 24. 23:19
반응형

 

정적 분석툴 중에 하나인 lint plugin을 Jenkins에 적용 하는 방법에 대하여 알아보려고 합니다.

 

Android 프로젝트는 기본적으로 lint task를 지원하고 있기 때문에 별도로 추가를 하지 않아도 사용이 가능합니다.

아래처럼 터미널에 명령어를 입력하면 lint task를 수행 후 report 파일까지 생성해서 결과를 제공해주고 있습니다.

이러한 report file을 jenkins에서 보여주도록 설정만 해주면 손쉽게 사용이 가능합니다.

$ ./gradlew lintDebug

> Task :app:lintDebug
Wrote HTML report to file:///JenkinsTestProject2/app/build/reports/lint-results-debug.html
Wrote XML report to file:///JenkinsTestProject2/app/build/reports/lint-results-debug.xml

 

Jenkins에 lint plugin 설치

jenkins에서는 plugin을 따로 설치 하여야 합니다.

Manage Jenkins 메뉴로 진입 후 Manage Plugins 화면으로 진입합니다. 그러면 상단에 몇개의 탭이 나오는데 "Available" 탭을 선택 후 "lint" 키워드로 검색을 합니다. 검색 결과에서 "Android Lint Plugin" 을 선택 후 설치를 합니다. 설치 후 jenkins server 재시작까지 한번 하도록 합니다.

 

 

Workspace에서 설정

Jenkins의 workspace에서 좌측에 있는 Configure 메뉴를 선택하여 설정 화면으로 진입합니다. gradle task 입력하는 섹션 (Execute shell) 에서 "./gradlew clean assembleDebug lintDebug" 처럼 lintDebug를 마지막에 입력합니다.

 

그리고 아래쪽에 있는 "Add post-build action" 메뉴 선택 후 Publish Android Lint Results"를 선택합니다.

위 스크린샷처럼 Lint files 에 lint 파일명을 입력합니다. 정확한 경로를 입력하여도 되지만 정규식 표현으로 대략적으로 입력하여도 표시가 가능하니 참고 바랍니다. 위와같이 입력 후 저장하고 빌드를 수행하면 lint task 수행 후 workspace 메인 화면에 그래프 형태로 결과를 보여주게 됩니다. 수정사항을 반영할때마다 lint 결과 갯수에 바로 반영이 되므로 지속적으로 관리하기에 용이합니다.

 

빌드 에러 발생시?

lint task 수행중에 이슈가 발견되어 빌드가 중지되는 경우에는 아래처럼 옵션을 설정합니다. build.gradle 파일의 android scope에 추가하면 정상적으로 빌드가 진행됩니다.

android {

    .... 중략

    lintOptions {
        abortOnError false
    }
}

Lint 룰 적용

lint의 많은 rule중에서 필요한 부분만 적용하고 그 이외에는 ignore 시킬수가 있습니다.

app이나 library 프로젝트 내부의 build.gradle 파일이 위치한 곳에 lint.xml 이라는 파일을 아래처럼 작성하면 lint task가 실행될때 lint.xml 파일을 읽은 후 rule대로 처리하게 됩니다.

<lint>
    <issue id="AllowBackup" severity="ignore" />
    <issue id="AaptCrash" severity="ignore" />
    <issue id="AccidentalOctal" severity="ignore" />
    <issue id="AdapterViewChildren" severity="ignore" />
    <issue id="AddJavascriptInterface" severity="ignore" />
    <issue id="AllowBackup" severity="ignore" />
    <issue id="AlwaysShowAction" severity="ignore" />

    ... 생략
</lint>

Lint task 구조

소스 코드 파일과 lint.xml 룰을 이용하여 툴이 동작.

 

반응형
Comments