Jenkins에서 ant 사용하여 Android 프로젝트 빌드하고 CheckStyle, FindBugs 적용하기

|

안드로이드 프로젝트를 ant 빌드 스크립트로 작성하는 방법은 생략한다.

(android ant 로 검색하면 꽤 많은 결과가 표시된다)


그래도 그냥 넘어가기 아쉬워 요약하자면, 안드로이드SDK/tools 디렉토리에 android 라는 실행파일이 있다.

(*nix는 android, 윈도 계열은 android.bat)


이 명령을 통해 build.xml 을 생성할 수 있으며, 기본적인 안드로이드 프로젝트의 구성이라면 큰 설정 없이

debug 또는 release 빌드 타겟을 주어 빌드가 가능하다.




젠킨스는 보통 리눅스계열 서버에서 돌리는게 일반적이고 (내 경우엔 우분투)

이 ant 스크립트를 실행하려면 서버에도 안드로이드 sdk가 설치되어 있어야 한다.




준비가 되었으면 Jenkins에 CheckStyle과 FindBugs 플러그인을 설치한다.

여기서 알아두어야 할 점은, 젠킨스 내 플러그인은 실제 코드 검증을 해 주는 역할이 아닌,

생성된 리포트 파일로 젠킨스 내 편의 기능을 만들어 줄 뿐이라는것.


즉, 코드 검증 절차는 직접 build.xml에 추가해주어야 한다.


[선행 작업]

CheckStyle 다운로드 : http://sourceforge.net/projects/checkstyle/

FindBugs 다운로드 : http://findbugs.sourceforge.net/downloads.html


CheckStyle 위치 : /usr/share/checkstyle-5.6 (환경에 따라 변경가능)

FindBugs 위치 : /usr/share/findbugs-2.0.2 (환경에 따라 변경가능)


checkstyle xml 준비 : CheckStyle에서 사용할 Coding convention을 정의하는 파일이다. 기본적으로 포함된 sun_checks.xml을 사용해도 좋지만 이걸 그대로 사용하면 잡히는게 너무 많으므로 누군가가 만들어둔 android용 checkstyle을 사용한다.

http://stackoverflow.com/questions/9339804/where-can-i-find-checkstyle-config-for-android-coding-style




파일이 준비되었으면, Jenkins에서 환경설정값을 잡아준다.

Jenkins관리 -> 시스템 설정 -> Global Properties -> Environment variables 에 각각 값 추가




같은 페이지에서 Ant -> Ant installation에 Ant 설치 경로 설정


Install automatically를 선택하고 버전만 선택하면 자동으로 설치해주는 기능 같은데.... 안된다. 그래서 직접 설정...




이제 build.xml에 빌드 타겟을 추가할 차례이다.

만약 build.xml을 android 툴을 통해 생성하였다면 local.properties 파일이 같이 생성되는데, 여기엔 sdk.dir 환경변수가 설정되어 있다.

build.xml에 sdk.dir 값은 이 local.properties내의 값이 우선하므로 경로 설정을 잘 확인해야 한다.

내 경우에는, local.properties 파일은 삭제하고, 위에서 Jenkins에 설정한 Global 환경변수를 통해 접근한다.


CheckStyle과 FindBugs 타겟은 각 프로젝트별 build.xml에 포함해도 상관없지만,

적용할 안드로이드 프로젝트가 다수라면 안드로이드 기본 build.xml에 포함하는것이 좋다고 본다.

파일 위치는 안드로이드SDK/tools/ant/build.xml 에 있다.





	

	
		
		
	






	
		
		
		
	




안드로이드 프로젝트에 대해 FindBugs를 돌릴 경우, R class들의 클래스명이 맞지 않다며 (대문자가 아니라며) 오류를 잡아낸다.

R 클래스들에 대해서 FindBugs를 무시하기 위해 아래와 같은 XML을 만들어



  
    
    
  



적당한 위치에 넣는다. (위 build.xml에서는 FindBugs홈/android-resource-filter.xml)


설정 후 Jenkins에 새 Job을 추가한다.


free-style software project를 선택하고, CVS/SVN설정 등은 각 환경에 맞게 설정하고,


Build 항목에서 Add build step을 선택하여 Invoke Ant를 선택하여 빌드를 추가한다.

Ant Version은 위에서 추가한 ANT_1.9.2를 선택하고, 타겟은 clean debug(혹은 release) checkstyle findbugs 를 입력한다.


그리고 Job에 checkstyle과 findbugs 메뉴를 추가하기 위해 Post-build Actions를 선택하여

Publish Checkstyle analysis result 와 Publish FindBugs analysis result 를 선택한다.


각각에 대해 결과가 저장된 xml 파일명을 지정해 주어야 하는데, build.xml에서 출력될 파일을 Jenkins에서 사용하는 기본값인,

checkstyle-result.xml 과 findbugs.xml 로 지정하였기 때문에 추가로 입력해야 하는 사항은 없다.


빌드를 시도하고, 정상적으로 완료되면 Job에 들어가서 왼쪽 메뉴에 Checkstyle Warnings와 FindBugs Warnings 메뉴가 추가된것이 보이고,

Job 상태화면에서 그래프는 빌드가 세번정도 수행되면 표시된다.




빌드 오류시 확인사항::

* build.xml에서 지정한 내용 중

- checkstyle-5.6-all.jar 파일 정상적으로 위치하는지

- android-checkstyle.xml 파일이 정상적으로 위치하는지


* ant 실행파일에 대한 퍼미션 => jenkins에서 빌드시 사용되는 계정 (기본값은 jenkins)에 접근권한 확인


* DoubleCheckedLocking 관련 오류가 발생한다면 => CheckStyle 5.6 이후로는 DoubleCheckedLocking을 지원하지 않으므로, android-checkstyle.xml 파일에서 DoubleCheckedLocking 관련 항목을 삭제한다. ( https://issues.apache.org/jira/browse/CXF-4530 )





꼬박 하루 넘게 삽질해보고 나중에 정리한거라 빠진게 있을지도 모르겠다.

궁금한 사항은 질문 주시길.



덧.

XML 내용중에 노드 값이 없는 경우 <노드 /> 를 사용하는데,

티스토리 에디터 문제로 <노드 ...></노드> 로 풀어쓴 부분이 꽤 된다... 이 부분은 적당히 /> 로 바꿔서 입력하면 됨..


And