jenkins를 이용해서 nodejs project의 CI를 구성하는 방법은 다음과 같다.
기본적으로 mocha와 istanbul을 이용해서 xunit.xml과 codecoverage.xml 파일을 생성한다.
Test 결과의 저장 - xunit.xml 생성
junit의 결과값과 동일한 xml 파일을 생성한다. mocha에 다음과 같은 plugin을 설치한다.
npm install spec-xunit-file@0.0.1-3
위 plugin을 설치하면 mocha에서 xunit.xml 파일을 생성해줄 수 있다. unit test와 동시에 xunit.xml 생성을 위해서는 다음과 같은 command를 실행한다.
mocha test/**/*.test.js -R spec-xunit-file
이제 root directory에 xunit.xml 파일이 생성된 것을 볼 수 있다.
CodeCoverage 테스트 실행
istanbul을 먼저 설치한다.
npm install -g istanbul
istanbul에서 mocha를 이용한 test coverage를 해준다.
istanbul _mocha test/**/*.test.js -R node_modules/spec-xunit-file
위 command는 기본적으로 mocha를 실행시키는것이기 때문에, Code Coverage를 수행하는 경우에는 Test결과는 같이 생기게 된다. 주의점은 package dependency로 spec-xunit-file을 넣어주는 것이다. 이는 istanbul에서는 기본적으로 mocha의 기본적인 reporter만을 인식하게 되고 나머지는 직접 경로를 통해서 얻어야지 되는 단점이 있기 때문이다.
이제 생성된 결과를 보면 coverage
라는 폴더가 생겨있다. 이 폴더를 지정해서 Cobertura xml을 생성해줘야지 된다. xml 생성은 다음 cmd를 통해서 생성가능하다.
istanbul report cobertura --root coverage --dir coverage
done
이 나오면 cobertura-coverage.xml
이 있는 것을 확인할 수 있다.
jenkins에 project의 등록
jenkins에 등록하기 위해서는 위 2가지 process를 순차적으로 실행시키면 된다. 그렇지만 문제가 두가지가 있다.
- spec-xunit-file를 상대경로를 사용할 수 없다. - jenkins에서 bash를 따로 실행시키는 것은 tomcat의 절대경로에 따라서 변경이 되게 된다. 따라서 tomcat의 경로를 넣어줘야지 되는 귀찮음이 생긴다.
- xunit.xml 파일의 절대경로를 얻어내야지 된다. - 역시 위와 같은 이유이다. spec-xunit-file의 경우
process path/xunit.xml
파일로 생성되기 때문에 이에 대한 절대 경로를 얻어서 넣어줘야지 된다.
위와 같은 문제를 해결하는 npm package인 jenkins-mocha
를 이용하는 것이 더 좋다고 생각된다.
jenkins-mocha
는 istanbul
과 mocha
에 대한 wrapper기능만을 제공하지만, unit.xml
파일과 coverage
를 jenkins prorject folder에 생성해주는 역활을 담당하게 된다.
npm을 이용해서 설치후, package.json
파일에 다음 내용을 추가한다.
"scripts": {
"test": "jenkins-mocha test/**/*.test.js"
},
등록 절차
freestyle project로 신규 project로 등록을 한다.
Build Process 등록
Execute Shell
을 선택하고, 다음 Step들을 추가한다.
npm install
: npm module을 다운 받는 processnpm test
: istanbul, mocha를 이용해서 test를 구동하고 coverage를 계산하는 processistanbul report cobertura --root artifacts/coverage --dir artifacts/coverage
: coverage.json을 cobertura.xml로 변경하는 process
Report file 등록
JUnit test report와 Code Coverage를 위한 Cobertura Coverage Report를 등록시키면 된다.
jenkins-mocha
에서 생성되는 기본 report 파일들의 위치는 다음과 같다.
xunit.xml
: artifacts/xunit.xml
- Cobertura xml report:
artifacts/coverage/cobertura-coverage.xml
위 두 파일을 Post Build Process
에 다음과 같이 등록하면 된다.
Completed
이제 build를 하면 다음과 같은 결과를 볼 수 있다.
nodejs application은 test가 일반 java application보다 빠르게 끝나는 것이 특징이고, 무엇보다 TDD나 BDD를 사용하기가 좀 더 용의한 언어구조를 가지고 있다. 좀 더 즐거운 개발을 할 수 있지 않을까 생각된다.