티스토리 뷰

출처 : http://blog.naver.com/joycestudy/100116443934



아래 링크에 나온 내용들을 따라 가면서, 허드슨으로 PHP 개발 환경을 구축해본다.

  • 허드슨으로 CI서버 구축하기  네이버 nForge 프로젝트 대상으로, 허드슨 CI 서버 구축한 예제...
  • 허드슨(영어식 발음은, 흠, 헛슨)에서 PHP의 각종 검사 도구를 결합해서 결과 보고서 생성

아래 항목들을 검사함.

  • phpcs : Coding Style 검사
  • phpunit : 단위 테스트
  • phpmd : 복잡도 검사
  • N’SIQ : LOC(Lines of Code) 측정

 

Hudson 서버 설치/실행

 

root 계정으로, 아래 명령 실행.

 

$ su -  

$ rpm --import http://hudson-ci.org/redhat/hudson-ci.org.key
$ wget -O /tmp/hudson.rpm http://hudson-ci.org/latest/redhat/hudson.rpm
$ rpm --install /tmp/hudson.rpm

 

아래와 같이, 실행.

 

$ whereis hudson.war

$ java -jar /usr/lib/hudson/hudson.war

 

/root/.hudson 폴더 아래에, hudson 관련 항목들이 생성된다.

디폴트 포트는 8080. 아래 링크로 접속하면, hudson 웹 화면이 나온다.

 

사용자 생성과 관련된 좀 더 자세한 내용은, 허드슨으로 CI서버 구축하기 참조 바람.

 

작업(job) 생성...




Repository URL: https://dev.naver.com/svn/nforge/trunk/nforge

svn username: anonsvn

svn password: anonsvn

 

PHPCS

코딩 스타일 검사 도구

 

설치

pear install PHP_CodeSniffer

설정

위의 문서에 약간의 오류(?)가 있다.

2.2 phpcs 사용

phpcs -n --standard=Zend --report=checkstyle --report-file=build/logs/checkstyle.xml --extensions=php --ignore=nforge/share/,nforge/jpgraph/ nforge

 

위와 같이 하면, 에러가 생긴다. build/logs 란 폴더가 없기 때문이다. build/logs를 빼고 checkstyle.xml 만 지정하면, 엉뚱하게도 /usr/share/pear/PHP/CodeSniffer 폴더에 checkstyle.xml 파일이 생긴다. 아마도 phpcs 프로그램이 그렇게 경로를 인식하는 듯....

 

아래와 같이 해줘야 한다. $WORKSPACE/build/logs/checkstyle.xml

 

phpcs -n --standard=Zend --report=checkstyle --report-file=$WORKSPACE/build/logs/checkstyle.xml --extensions=php --ignore=nforge/share/,nforge/jpgraph/ --tab-width=4 nforge/common

 



검사 대상도, nforge/common으로 한정했다. nforge 전체를 대상으로 하면, 너무 많은 오류(?)가 나온다. 아직, nforge 프로젝트 자체가 코딩 스타일 통일이 안된 듯 보인다.

 

Post-build Actions에서 Checkstyle 결과 화면을 위해서는 아래와 같이 설정해준다. 이 때, Advanced 버튼을 눌러서 Run always 항목을 체크해준다. 그래야, 에러가 있어도 그래프를 그려준다.

  • Checkstyle results: build/logs/checkstyle.xml

 



 

실행

프로젝트 화면 우측에 아래와 같은 그래프가 나타남.


 

화면 좌측의  Checkstyle Warnings 메뉴를 누르면, 상세 정보를 확인할 수 있슴.


 


 

PHPUnit

단위 테스트 도구. 코드 커버리지까지 측정.

설치

코드 커버리지 검사를 위해서는 PHP xdebug 모듈이 설치되어 있어야 함.

 

yum install php-devel
pecl install xdebug

 

xdebug가 정상 설치/설정되면 아래와 같이 나옴

 

[root@main ~]# php -v
PHP 5.2.10 (cli) (built: Nov 13 2009 11:24:03) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

 

nForge의 phpunit 은 시스템에 정상 설치된 것에 대해서만 정상 작동함. 다시 말해서, hudson에서 workspace에 svn으로 내려받은 것에 대해서는 phpunit이 제대로 작동하지 않음.

  • /opt/nforge 에 nforge를 설치했다고 가정함.

 

설정

Execute shell에 아래와 같이 지정

 

cd /opt/nforge/tests/func/
phpunit --stderr --log-junit $WORKSPACE/build/logs/junit.xml --coverage-clover $WORKSPACE/build/logs/clover.xml AllTests

 

Post-build Actions의 Publish testing tools result report 항목에는 아래와 같이 지정


 

Add 버튼을 눌러서, 아래와 같이 PHPUnit-3.4 항목을 선택.


 

 

Post-build Actions의 Publish testing tools result report 항목은 아래와 같이 설정.

“Fail the build if test results were not updated this run” 항목은 언체크하는 게 좋겠다. 반복 실행시, 이전에 돌린 것과 차이가 없으면, 실패라고 간주해버린다.

 

 

Post-build Actions의 Publish Clover Coverage Report 항목에는 아래와 같이 지정




 

실행

 

프로젝트 메인 화면이 아래와 같이 바뀜. Unit Test 결과와 함께 Code Coverage가 표시됨.


 

PHP Mess Detector, phpmd

정적 분석 검사 도구. PHP는 컴파일 언어만큼 정교하게 분석되지는 않지만, 코딩시에 복잡도를 측정하면서 진행하면 나름 꽤 유용할 듯.

  • Possible bugs

  • Suboptimal code

  • Overcomplicated expressions

  • Unused parameters, methods, properties

설치

 

pear channel-discover pear.phpmd.org 
pear channel-discover pear.pdepend.org 
pear install --alldeps phpmd/PHP_PMD-alpha

% 간혹 ImageMagick 이 없다고 나올 때에는, yum install ImageMagick 으로 설치.

% pecl install imagick 설치를 위해서는 yum install ImageMagick-devel 까지 필요할 수도 있슴.

% 위의 pear 명령 실행전에 yum install ImageMagick 과 yum install ImageMagick-devel 을 해주는 게 좋겠슴

 

설정

 

Execute shell에 아래와 같이 설정.

 

phpmd $WORKSPACE/nforge/common xml codesize --reportfile $WORKSPACE/build/logs/pmd.xml

% nforge 전체에 대해서 수행하면, 너무 오래 걸려서, common에 대해서만 수행함.

 

Post-build Actions의 Publish PMD analysis results 항목에 아래와 같이 설정. Advanced 버튼을 눌러서, Run always 항목 체크해줘야 분석을 항상 실행함.


 

실행

 

빌드를 실행하면, 아래와 같이 PMD Trend 그래프가 생김.


 

그리고, 분석 결과를 눌러보면, 아래와 같이 상세 정보를 살펴볼 수 있슴.



 

 

NSIQ Collector

 

네이버에서 만든, 복잡도 분석 도구.

PHP에 대해서는 사이클로매틱 복잡도 계산이 작동하지 않음, 그 대신, LOC(Lines of Code)를 측정.

 

설치

 

cd /opt
wget http://dev.naver.com/frs/download.php/957/nsiqcollector_2.1.4.tar.gz 
tar zxvf nsiqcollector_2.1.4.tar.gz

% 위와 같이 하면, 실행파일 경로는, /opt/nsiqcollector/nsiqcollector 가 된다.

 

설정

 

 Hudson 관리 > Configure System 메뉴에서 아래와 같이 설정.


 

프로젝트의 configure 메뉴에서, Buiild 항목에서 Add build step 메뉴의 Execute N’SIQ Collector 항목을 선택.


 

아래와 같이 검사할 폴더를 지정함. $WORKSPACE/nforge/common 폴더를 검사하려 하는데, 아래와 같이 지정하면 됨.


 

Post-build Actions 의 Publish N'SIQ Collector 항목에는 아래와 같이 설정.



 

실행

아래와 같이 그래프가 나타남.



 

종합 정리

 

설정 화면을 다시 종합적으로 살펴보면, 아래와 같다.

 






 



 

프로젝트의 메인 화면은 아래와 같은 그래프들로 채워진다.




 

 

추가사항: Hudson을 /sbin/service 로 작동시켰을 때

CentOS에서 yum을 사용하여 hudson을 설치하면, 아래와 같은 파일들이 설치된다.

 

# rpm -ql hudson
/etc/init.d/hudson
/etc/logrotate.d/hudson
/etc/sysconfig/hudson
/etc/yum.repos.d/hudson.repo
/usr/lib/hudson
/usr/lib/hudson/hudson.war
/usr/sbin/rchudson
/var/lib/hudson
/var/log/hudson

 

그리고, hudson 이라는 사용자 계정도 만들어진다.

 

# grep hudson /etc/passwd
hudson:x:105:108:Hudson Continuous Build server:/var/lib/hudson:/bin/false

 

아래 명령으로 hudson을 서비스로 작동시킬 수 있다. 그리고, 이미 시스템 부팅/셧다운시에 자동으로 서비스가 올라오거나 내려가게 설정되어 있다.

 

# /sbin/service hudson start

# /sbin/service hudson stop

 

# /sbin/chkconfig --list hudson
hudson          0:해제  1:해제  2:해제  3:활성  4:해제  5:활성  6:해제

 

hudson을 서비스로 작동시키면, /var/lib/hudson 아래에 관련 파일들이 생성된다.

 

약간의 문제는, hudson 계정으로 서비스가 실행되므로 파일 권한이 제한되어 있어서, nforge 같이 root 권한이나 필요한 애플리케이션을 테스트할 때 에러가 발생할 수 있다.

 

1) IssueTest::test_reformat_issue
session_start(): open(/var/lib/php/session/sess_joug3fmdahutjt4dmf7i9vu7i2, O_RDWR) failed: 허가 거부됨 (13)

2) ArtifactTest::testUploadFile
fopen(/tmp/test.txt): failed to open stream: 허가 거부됨


2) ArtifactTest::testUploadFile
mkdir(): 허가 거부됨

/opt/nforge/common/tracker/ArtifactFile.class.php:200
/opt/nforge/tests/func/TrackerTestCase.php:171
/opt/nforge/tests/func/ArtifactTest.php:28

 

이것은, nforge 프로젝트 프로그램 자체가 root 권한으로만 PHPUnit 테스트 가능하게 작성된 탓으로 보인다.

 

수정: build/logs 폴더 초기화해야 결과가 정확해진다.

 

이 예제를 제대로 실행하려면, 아래와 같이 Build의 Execute shell 항목을 제일 먼저 집어 넣어줘야 한다.

 

rm -rf $WORKSPACE/build
mkdir $WORKSPACE/build
mkdir $WORKSPACE/build/logs

 



 

그리고, nForge 프로젝트의 특성상, phpmd나 phpcs를 실행해보면, 에러가 막 나온다. Hudson의 Execute shell은 sh –xe 옵션으로 실행된다. 따라서, exit code가 0이 아니면 바로 Fail이 되면서, 그 다음에 설정해놓은 것들은 아예 실행도 안된다.

 

build/logs 폴더를 제거해서 초기화 하지 않으면, 그 이전에 운좋게도 실행에 성공했던 결과 파일이 계속 매번 빌드 때마다 취합되는 황당한 현상이 계속 된다.

 

자, 그럼, 어떻게 하면, Execute shell에서, phpmd 나 phpcs가 에러 상태를 리턴하더라도, 그 다음으로 계속 전진하게 만들 수 있을까?

 

비결은 간단하다. 아래와 같이 더블 파이프 pipe 를 써주고 언제나 성공값( 0 )을 반환하는 구문을 넣어주면 된다.

 

phpmd $WORKSPACE/source/common xml codesize --reportfile $WORKSPACE/build/logs/pmd.xml || echo "PASS"

 

|| echo “PASS”

'program' 카테고리의 다른 글

TestNG  (0) 2015.01.09
Selenium을 이용한 UI 테스트  (0) 2014.12.22
java AES256 암호화 복호화 소스  (0) 2014.12.08
java AES 128  (0) 2014.12.08
[오라클] GRANT , 오라클 권한 부여의 모든 것  (0) 2014.10.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함