코드의 품질을 높이기 위해서 많이 사용되는 것이 코드에 대한 정적분석을 통해서 코드의 품질을 평가하는 것이다.

코드정적분석에 사용되는 도구로는 checkstyle, findbugs, PMD 등 이 있다. 그레들gradle에 checkstyle, PM 를 추가하는 방법을 설명한다.

1. checkstyle

1.1. 사용방법

1.1.1. gradle's checkstyle 플러그인 추가

apply plugind: 'checkstyle'

build.gradle 파일에 플러그인을 추가한다.

1.1.2. checkstyle.xml 작성

1.1.3. build.gradle 파일에 checkstyle 태스크를 정의한다.

checkstyle {
  ignoreFailures = true // 분석결과 예외가 발생하면 빌드실패 발생시키는 것을 제외
    configFile = file("checkstyle.xml") // 1.1.2 에서 작성한 checkstyle 파일 지정
    reportsDir = file("${buildDir}/checkstyle-output") // 리포트 파일이 위치할 디렉토리 지정
}
 
checkstyleMain {
    reports {
        xml.destination = file("${checkstyle.reportsDir}/checkstyle-report.xml") // 리포트 파일의 위치 및 파일명 지정
    }
}

1.1.4. checkstyle 실행

$ gradle check

checkstyle 플러그인을 추가하면 그레들의 check 태스크를 수정하여 checkstyle 의 checkstyleMain, checkstyleTest 들을 실행시킨다.

1.2. 태스크Tasks

Task nameDepends onTypeDescription
checkstyleMainclassesCheckstyleRuns Checkstyle against the production Java source files.
checkstyleTesttestClassesCheckstyleRuns Checkstyle against the test Java source files.
checkstyleSourceSetsourceSetClassesCheckstyleRuns Checkstyle against the given source set's Java source files.

1.3. checkstyle.xml 기본구조

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
          "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
          "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
 
<module name="Checker">
    <property name="charset" value="UTF-8" />
    <property name="severity" value="warning" />
    <property name="fileExtensions" value="java, properties, xml" />
 
    <module name="TreeWalker">
        <!-- 사용되는 모듈과 모듈속성을 정의-->
    </module>
</module>

2. PMD

2.1. 사용방법

2.1.1. gradle's pmd 플러그인 추가

apply plugind: 'pmd'

build.gradle 파일에 플러그인을 추가한다.

2.1.2. pmd 태스크의 속성을 정의한다.

pmd {
  ignoreFailures = true // 분석결과 예외가 발생하면 빌드실패 발생시키는 것을 제외
    reportsDir = file("${buildDir}/pmd-output")
}
 
pmdMain {
    reports {
        xml.destination = file("${pmd.reportsDir}/pmd-report.xml")
        xml.enabled = true
    }
}

2.1.3. 실행

$ gradle check

PMD 플러그인이 check 태스크에 의존성을 추가한다.

2.2. 태스크Tasks

태스크명의존유형설명
pmdMain-Pmd출시 소스파일을 대상으로 PMD 실행
pmdTest-Pmd테스트 소스파일을 대상으로 PMD 실행
pmdSourceSet-Pmd지정된 소스셋SourceSet을 대상으로 PMD 실행

3. 정리

checkstyle과 pmd 에서 생성한 XML 보고서는 JENKINS에서 사용하기 위한 분석데이터로 사용된다.

JENKINS에서 checkstyle, pmd 플러그인을 설치한 후 report.xml 경로를 지정한 후



빌드가 정상적으로 진행되면서 분석문서가 생기면 다음과 같은 항목들이 왼쪽 메뉴에 추가가 되고,



각각의 결과를 확인할 수 있다.




○ 참고문헌


20140527 Jenkins 재시작 후 데이터 초기화 증상 해결

사내에서 사용하던 Jenkins가 구동되고 있는 서버가 정전으로 재가동 후 최초 설치상태로 초기화되는 현상이 나타났다.

멘붕!!!

Jenkins의 이런 증상을 처음 경험한 나로서는 어찌해야하는 물어볼 사람도 없고 인터넷 검색으로 뒤지기 시작한다.
그러다가 [Jenkins 관리 - 환경설정] 부분 상단에 HOME Directory 라는 항목의 값이 눈에 들어온다.

/{USER_HOME}/.hudson

이녀석! 이상하다! 내가 쓰고 있는 건 jenkins 인데!?

라는 생각과 함께 JENKINS_HOME 과 관련된 검색에 들어간다. +_+) 그러다가 아래 녀석을 찾았다.

여기서 말하는 JENKINS_HOME은 젠킨스가 실행되는 경로가 아닌, 젠킨스가 사용자 디렉토리에 생성한 ~/.jenkins 폴더를 가리키는 것이었다.
이후 이를 해결하는 방법은 어려움이 없었다. 환경설정에서 ‘홈 디렉토리Home Directory’ 항목의 오른쪽 물음표(?)를 클릭하면 JENKINS_HOME을 WAS에 설정하라는 안내를 한다.

Jenkins stores all the data files inside this directory in the file system. You can change this by either:
    1. Using your web container's admin tool to set the **JENKINS_HOME** environment entry.
    2. Setting the environment variable **JENKINS_HOME** before launching your web container.
    3. (Not recommended) modifying web.xml in jenkins.war (or its expanded image in your web container).
This value cannot be changed while Jenkins is running. This entry is mostly for you to make sure that your configuration is taking effect.

이후 문제는 쉽게해결 가능하다. 톰캣 서버의 ‘./bin’ 폴더에서 catalina.sh를 열어서

set JENKINS_HOME=/{USER_HOME}/.jenkins

항목만 추가해주고 톰캣을 구동시켜주면 끝이났다. +_+)b That's OK~!

이 문제를 해결하면서 젠킨스의 버전도 스리슬쩍 1.564 버전으로 변경했다.

데이터가 분리되어 있으니 젠킨스를 업그레이드 해도 별문제가 없을 거라고 생각했다.

찍었는데 맞았다!


 

 작업전 확인사항 

 

  • 사용자 폴더 밑에 '~/.jenkins' 라는 폴더가 있는지 확인
    • 젠킨스 설정 데이터가 저장되는 폴더다
  • 젠킨스를 구동하는 WAS의 실행환경변수로 'JENKINS_HOME'이 추가되어 있는지 확인



어느 스터디에서 개발환경 구축과 관련된 이런저런 이야기가 오고가는 것을 보다가, 문득 생각이 나서 다시 찾은 'OPENSFHIT'

https://www.openshift.com/

보는 것처럼, 개발, 호스팅, 스케일 확장의 기능을 제공하는 플랫폼이다. 익숙한, Java, Maven, Git, Tomcat, Jenkins를 제공하여 기어(Gear, 가상머신 인스턴스의 개념)로 제공한다. 협업자들을 추가하여 사용가능하다.


Free plan으로 사용

최초 'My app' 선택시

사용가능한 Gear(인스턴스 개념)

Tomcat7 기어 선택 예

Tomcat 기어 설치 후, 자바를 기반으로 한 웹애플리케이션 프로젝트가 추가된 git 저장소도 함께 추가됨

git에 대한 접근은 'Settings - Public Keys' 항목에 개인 public key를 생성하면 됨

- SSH public key 생성방법: https://help.github.com/articles/generating-ssh-keys

Tomcat7 기어 생성 완료후



Tomcat7 기어를 통해 생성한 프로젝트의 초기 디렉토리 구조

Tomcat7 기어가 실행된 URL을 통한 동작확인

- 기본 동작은 git을 통해 push가 실행되는 순간 빌드 및 배포가 이루어진다.

Tomcat7 기어 밑에 'Continous Integration' 에 있는 'Enable Jenkins'를 선택하면 Tomcat7 기어에 대한 빌드잡(Job)을 가진 Jenkins 기어가 생성된다.

젠킨스 기어의 공개 URL을 정의한다.

젠킨스 기어가 생성되고 최초 계정 admin과 비밀번호가 노출된다.

젠킨스 기어에 추가된 'tomcat7ews-build' 작업





MySQL 5.5 카트리지를 tomcat7 기어에 추가하는 모습

추가 완료 후, MySQL 5.5 생성정보가 노출

생성된 URL과 계정을 통해 로그인한 phpMyAdmin

기어 사용이 완료된 tomcat7의 내부 모습

이 과정에서 나는 2개의 기어를 생성했다.

- Tomcat7

- Jenkins

아직 1개의 기어가 남아있다.

Free plan으로는 3개의 기어가 사용가능하다.

협업도 가능한데, [Application]을 선택한 화면에서 'Available in domain XXXXX' 를 선택하고

오른쪽에 있는 'No one else can see this domain. Add members...'에서  'Add members`를 선택하고

OpenShift에 가입해있는 사용자 id와 권한 [View, Edit, Administrator] 권한 중 하나를 할당하면 된다.

굿럭!

+ Recent posts