Jenkins를 활용한 javascript 개발

53
Jenkins for Javascript Development Env.

description

 

Transcript of Jenkins를 활용한 javascript 개발

Page 1: Jenkins를 활용한 javascript 개발

Jenkinsfor Javascript Development Env.

Page 2: Jenkins를 활용한 javascript 개발

About me

윤지수[email protected]

Page 3: Jenkins를 활용한 javascript 개발

지속적인 통합 ?> 품질 , 안전성

Page 4: Jenkins를 활용한 javascript 개발

지속적인 통합 : continuous integration (CI)

1. Watch code2. Build Project3. Run Tests4. Publish Results

Page 5: Jenkins를 활용한 javascript 개발

첫째 .

CI? Jenkins?

Page 6: Jenkins를 활용한 javascript 개발

Jenkins vs. Hudson

Java.net 을 사용하던 Hudson 은 SUN 이 Oracle 에 인수된 이후 Oracle 의 ‘ Hudson’ 상표권 주장으로 Jenkins 으로 분리

Page 7: Jenkins를 활용한 javascript 개발

Jenkins vs. Hudson

비슷하다 ( 설정 , 플러그인 등 )

Page 8: Jenkins를 활용한 javascript 개발

Jenkins 의 실체

: jenkins.war + web server

Page 9: Jenkins를 활용한 javascript 개발

Jenkins 의 실체

Page 10: Jenkins를 활용한 javascript 개발

둘째 .

Jenkins 해보기

Page 11: Jenkins를 활용한 javascript 개발

오해CI 구축은 어렵다

Javascript 프로젝트의 CI 구축은 더 어렵다

CI 운영비용은 비싸다

CI 는 규모가 있는 프로젝트에서만 하는

것이다

Page 12: Jenkins를 활용한 javascript 개발

Today’s Goal?: Javascript CI 환경 만들기 Jenkins 와 함께 쉽게 !

Page 13: Jenkins를 활용한 javascript 개발

할 짓 요약

Jenkins 설치

소스 보관소 연동

코드가 좋은 코드인지 확인

코드가 잘 돌아가는 건지 확인

코드량이 얼마인지 확인

Page 14: Jenkins를 활용한 javascript 개발

Jenkins 설치

소스 보관소 연동 Github

코드가 좋은 코드인지 확인

JSLint

JSLint 결과 Jenkins 에서 시각화

코드가 잘 돌아가는 건지 확인

Testing framework : Qunit

테스트 자동화 : JsTestDriver

코드 커버리지 : jscoverage

테스트 결과를 jenkins 에서 시각화

Test 결과 (jUnit test result Plugin)

Coverage 결과 (cobertura Plugin)

코드량이 얼마인지 확인 N’Siq Plugin

Page 15: Jenkins를 활용한 javascript 개발

이런 젠장 ,

뭔가 복잡해 ..

다 .. 기억하지 않으셔도 되요 .

Page 16: Jenkins를 활용한 javascript 개발

Jenkins 설치

1.Download

Page 17: Jenkins를 활용한 javascript 개발

Jenkins 설치

2. install

Page 18: Jenkins를 활용한 javascript 개발

Jenkins 설치

3. Window service

Page 19: Jenkins를 활용한 javascript 개발

Jenkins 설치

4. Browser 확인

Page 20: Jenkins를 활용한 javascript 개발

Jenkins 설치

5. Jenkins Plugins 설치 방법

Page 21: Jenkins를 활용한 javascript 개발

Jenkins 설치

6. 새로운 프로젝트 생성 !

Page 22: Jenkins를 활용한 javascript 개발

Jenkins 설치

6. 새로운 프로젝트 생성 !

Page 23: Jenkins를 활용한 javascript 개발

Jenkins 설치

6. 새로운 프로젝트 생성 !

Page 24: Jenkins를 활용한 javascript 개발

Git 연동

1. Download github plugin

2. local 에 git 설치http://git-scm.com/downloads

3. Jenkins 설정 - git

Page 25: Jenkins를 활용한 javascript 개발

Git 연동project 에 설정하기

Page 26: Jenkins를 활용한 javascript 개발

Git 연동확인하기

Page 27: Jenkins를 활용한 javascript 개발

JSLint 연동

연동 방법 개요

1. JSLint 의 Java 버전을 다운로드

2. Jenkins 에 Ant 빌드 스크립트로 실행

3. Jenkins 에서 그래프로 보여주기 위해서 Violations Plugin

설치

4. Build

Page 28: Jenkins를 활용한 javascript 개발

JSLint 연동

1. Download JSLint4Java

2. Ant Build 파일 만들기

http://code.google.com/p/jslint4java/downloads

Jekins/workspace/{projectname}/build.xml

<target name="jslint" description="run the JSLint tool on JS files"> <fileset dir="." id="jsfiles.raw">

<include name="src/*.js" /> <exclude name="src/*.min.js" />

</fileset> <pathconvert pathsep=" " property="jsfiles.clean" refid="jsfiles.raw" /> <exec executable="java" output="build/jslint.xml">

<arg line="-jar ../../lib/jslint4java.jar --report xml ${jsfiles.clean}" /> </exec></target>

Page 29: Jenkins를 활용한 javascript 개발

JSLint 연동

3. project 설정에 추가하기

Page 30: Jenkins를 활용한 javascript 개발

JSLint 연동

4. 확인 (result.xml)

Page 31: Jenkins를 활용한 javascript 개발

JSLint 연동

5. Jenkins 그래프로 보기 – violations plugin 설치

6. Jenkins 그래프로 보기 – project 설정

Page 32: Jenkins를 활용한 javascript 개발

JSLint 연동

7. Jenkins 그래프로 보기 – 빌드 그리고 확인 (1)

70 개의 문제가 발견 됨을 표시하고 있음

Page 33: Jenkins를 활용한 javascript 개발

JSLint 연동

7. Jenkins 그래프로 보기 – 빌드 그리고 확인 (2)

파일별로 오류 내용을 확인 할 수 있음

Page 34: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

연동 방법 개요

1. JsTestDriver.jar , JsTestDriver-Qunit adaptor, jscover-

age 다운로드

2. JsTestDriver.conf 설정

3. Ant 빌드 스크립트 작성

4. JsTestDriver Running

5. 테스트 결과를 그래프로 보기 위한 설정 (jUnit test result re-

port)

6. 커버리지 결과를 그래프로 보기 위한 설정 (cobertura Plugin

설치 )

7. Cobertura Plugin 에서 지원되는 xml 타입으로 coverage

결과를 변환

Page 35: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

1. 다운로드 : JsTestDriver , JsTestDriver-Qunit adaptor, js-

coverageJsTestDriver.jar ,jscoverage.jarhttp://code.google.com/p/js-test-driver/downloads/list

JsTestDriver-Qunit.jar https://github.com/exnor/QUnit-to-JsTestDriver-adapter/downloads  # http://code.google.com/p/js-test-driver/wiki/QUnitAdapter  이걸 받으면 안됨 (qunit 변경 메소드 반영 안됨 )

Page 36: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

2. JsTestDriver.conf 설정server: http://localhost:4224

load:

- lib/qunit.js

- lib/qunit_jstestdriver_adaptor/equiv.js //qunit adaptor

- lib/qunit_jstestdriver_adaptor/QUnitAdapter.js //qunit adaptor

- lib/jindo.desktop.all.js

- src/*.js

- lib/*.js

- spec/testcode.js

serve:

- spec/test.html

- lib/qunit.css

plugin:

- name: "coverage"

jar: "lib_etc/coverage.jar"

module: "com.google.jstestdriver.coverage.CoverageModule"

# jstestdriver configuration : http://code.google.com/p/js-test-driver/wiki/ConfigurationFile

Page 37: Jenkins를 활용한 javascript 개발

Jenkins 설치 Git 연동 JSLint 연동 jsTestDriver 연동 LOC

JsTestDriver 연동

3. 잠깐 ! JsTestDriver 는 CI 와 별개로 별도로 달리고 있어야 함

C:\code\run\jenkins\workspace\jenkins-test> java -jar JsTestDriver.jar --port 4224

Page 38: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

4. Ant Build 실행

C:\code\run\jenkins\workspace\jenkins-test> java -jar JsTestDriver.jar --port 4224

<target name="jstestdriver" depends="jslint" description="build jstestdriver">

<echo>build jstestdriver</echo>

<exec executable="java">

<arg line="-jar" />

<arg path="../../lib/jsTestDriver.jar" />

<arg value="--server"/>

<arg value="http://localhost:4224"/>

<arg value="--tests"/>

<arg value="all"/>

<arg value="--testOutput"/>

<arg value="./build"/>

<arg value="--reset"/>

</exec>

</target># jstestdriver  command line flags : http://code.google.com/p/js-test-driver/wiki/CommandLineFlags

Page 39: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

5. 지금까지 Ant Build <target name="jslint" description="run the JSLint tool on JS files">

<fileset dir="." id="jsfiles.raw">

<include name="src/*.js" />

<exclude name="src/*.min.js" />

</fileset>

<pathconvert pathsep=" " property="jsfiles.clean" refid="jsfiles.raw" />

<exec executable="java" output="build/jslint.xml">

<arg line="-jar ../../lib/jslint4java.jar --report xml ${jsfiles.clean}" />

</exec>

</target>

<target name="jstestdriver" depends="jslint" description="build jstestdriver">

<echo>build jstestdriver</echo>

<exec executable="java">

<arg line="-jar" />

<arg path="../../lib/jsTestDriver.jar" />

<arg value="--server"/>

<arg value="http://localhost:4224"/>

<arg value="--tests"/>

<arg value="all"/>

<arg value="--testOutput"/>

<arg value="./build"/>

<arg value="--reset"/>

</exec>

</target>

Page 40: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

6. Build !

테스트 결과 : TEST-Chrome_210118083_Windows.DefaultaModule.xml테스트 커버리지 : jsTestDriver.conf-coverage.dat

Page 41: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

7. 테스트 결과를 그래프로 보기 위한 projcet 설정 (jUnit test result

report)동작 방식 : ‘TEST-Chrome_210118083_Windows.DefaultaModule.xml’ 파일을 분석해서 결과를 보여줌 .

Page 42: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

8. Build 후 확인

Page 43: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

8. 커버리지 결과를 그래프로 보기 위한 설정 (cobertura Plugin 설치 )

9. Cobertura Plugin 에서 지원되는 xml 타입으로 coverage 결과를

변환jsTestDriver.conf-coverage.dat 파일을 Cobertura 지원 xml 타입으로 변환하기 위해 python 오픈소스 script 를 활용

• 먼저 Local 에 Python 설치 : http://www.python.org/getit/• Cobertura 변환 Python script 다운로드 : https://github.com/eriwen/lcov-to-cobertura-xml• 실행 : Jenkins Python Plugin 을 통해서 script 를 실행 할 수 있지만 , 윈도우에서 Python 실행 PATH 를

인식하지 못하는 문제 발견 . 대안으로 Ant build 로 실행하고 exeutable 에 절대경로를 입력 < 다음장에서 Ant build 설정 >

Page 44: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

9. Cobertura Plugin 에서 지원되는 xml 타입으로 coverage 결과를

변환

<target name="start" depends="jstestdriver" description="build python script">

<echo>build python for making cobertura xml</echo>

<exec executable="C:\Python27\python.exe" failonerror="true">

<arg value="lib_etc/lcov-to-cobertura-xml.py" />

<arg value="build/jsTestDriver.conf-coverage.dat" />

<arg value="-o"/>

<arg value="build/coverage.xml"/>

</exec>

</target>

Ant build 에 python script 실행 추가

Page 45: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

10. Project 설정에 corbetura 추가

Page 46: Jenkins를 활용한 javascript 개발

JsTestDriver 연동

1. Build 후 coverage 결과 확인

Page 47: Jenkins를 활용한 javascript 개발

LOC 연동

1. LOC(Line of Code)NHN Opensource 활용 : https://wiki.jenkins-ci.org/display/JENKINS/NSIQ+Collector+Plugin복잡도 ,LOC 를 계산해주지만 LOC 만을 활용

2. project 설정

Page 48: Jenkins를 활용한 javascript 개발

LOC 연동

3. Build 후 확인

Page 49: Jenkins를 활용한 javascript 개발

Complete!

Page 50: Jenkins를 활용한 javascript 개발
Page 51: Jenkins를 활용한 javascript 개발

좀 더 해야 할 것Jstestdriver test code 에서 외부 라이브러리를 사용하는 경우 에러가 발생 . Js 파일을 로딩하는데 문제가 있음 (re-

quire.js 와 같은 것으로 동적로딩 필요 )

복잡도 , 중복코드 검사Cyclomatic complexity 나 중복코드 검사 Plugin 연동 Reporting

Other TestingSelenium, WebDriver, or PhantomJS

Mobile 환경 테스트

Other CI (Travis CI)Github 와 찰떡 궁합으로 경량화된 CIhttp://blog.outsider.ne.kr/779http://tech.qmetric.co.uk/automating-javascript-ci-with-buster-js-and-travisci_205.html

Page 52: Jenkins를 활용한 javascript 개발

Appendix. Inside NHN 품질관리

Hudson 기반의 Quality Practice 활동http://book.naver.com/bookdb/book_detail.nhn?bid=6349938 (book)

JSLint Cyclomatic Complexity, Coverage 통합 자체 Plugin 개발

Selenium 활용한 UI Test 자동 http://helloworld.naver.com/helloworld/87523

http://www.slideshare.net/jscamp_kr/jscamp-hannam-qunit-test-automation-using-hudson-and-selenium

Dashboard, JIRA 연동

중복코드 검사

기타 프로젝트별 Build 에 필요한 Hudson Plugin 개발

Page 53: Jenkins를 활용한 javascript 개발

참고http://wiki.hudson-ci.org/display/HUDSON/Plugins

http://stephen.rees-carter.net/2011/05/jenkins-ci-jslint-javascript-quality-checking/

http://eriwen.com/tools/continuous-integration-for-javascript/

http://hudson-ci.org/download/plugins/

http://mirrors.jenkins-ci.org/ 

http://code.google.com/p/jslint4java/downloads

http

://meri-stuff.blogspot.kr/2012/01/javascript-testing-with-jstestdriver.ht

ml

http://code.google.com/p/js-test-driver/wiki/

http://pseudobry.com/js-test-driver-qunit-coverage-requirejs/

https

://github.com/youzee/tips-n-tricks/wiki/The-JavaScript-testing-stack

http://www.python.org/getit/

https://wiki.jenkins-ci.org/display/JENKINS/NSIQ+Collector+Plugin

http://pseudobry.com/js-test-driver-qunit-coverage-requirejs/

https://github.com/youzee/tips-n-tricks/wiki/The-JavaScript-testing-stac

k