SlideShare una empresa de Scribd logo
1 de 53
Jenkins
for Javascript Development Env.
About me


              윤지수
   aniga75@gamil.com
지속적인 통합
> 품질,안전성
지속적인 통합
: continuous integration (CI)

1.   Watch code
2.   Build Project
3.   Run Tests
4.   Publish Results
첫째.
CI? Jenkins?
Jenkins vs. Hudson




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




비슷하다 (설정, 플러그인 등)
Jenkins 의 실체


: jenkins.war + web server
Jenkins 의 실체
둘째.
Jenkins 해보기
오해
CI 구축은 어렵다
Javascript 프로젝트의 CI구축은 더 어렵다
CI 운영비용은 비싸다
CI는 규모가 있는 프로젝트에서만 하는 것이
다
Today’s Goal?
: Javascript CI 환경 만들기
  Jenkins와 함께 쉽게 !
할 짓 요약
Jenkins 설치
소스 보관소 연동
코드가 좋은 코드인지 확인
코드가 잘 돌아가는 건지 확인
코드량이 얼마인지 확인
Jenkins 설치




   소스 보관소 연동                  Github




                              JSLint

코드가 좋은 코드인지 확인

                   JSLint 결과 Jenkins에서 시각화




                     Testing framework : Qunit




                    테스트 자동화 : JsTestDriver

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

                    코드 커버리지: jscoverage

                                                 Test결과(jUnit test result Plugin)
                   테스트 결과를 jenkins에서 시각
                                화
                                                 Coverage 결과(cobertura Plugin)

 코드량이 얼마인지 확인              N’Siq Plugin
이런 젠장, 뭔가
복잡해..

다.. 기억하지
않으셔도 되요.
Jenkins설치
   1.Download
Jenkins설치
   2. install
Jenkins설치

   3. Window service
Jenkins설치
  4. Browser 확인
Jenkins설치
  5. Jenkins Plugins 설치 방법
Jenkins설치


  6. 새로운 프로젝트 생성!
Jenkins설치
  6. 새로운 프로젝트 생성!
Jenkins설치
  6. 새로운 프로젝트 생성!
Git 연동

 1. Download github plugin




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



 3. Jenkins 설정 - git
Git 연동
 project에 설정하기
Git 연동
 확인하기
JSLint 연동

 연동 방법 개요

 1.   JSLint의 Java버전을 다운로드
 2.   Jenkins에 Ant 빌드 스크립트로 실행
 3.   Jenkins에서 그래프로 보여주기 위해서 Violations Plugin설치
 4.   Build
JSLint 연동

 1. Download JSLint4Java
  http://code.google.com/p/jslint4java/downloads



 2. Ant Build 파일 만들기
   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>
JSLint 연동

 3. project 설정에 추가하기
JSLint 연동
 4. 확인 (result.xml)
JSLint 연동
 5. Jenkins 그래프로 보기 – violations plugin 설치




 6. Jenkins 그래프로 보기 – project 설정
JSLint 연동
 7. Jenkins 그래프로 보기 – 빌드 그리고 확인(1)




 70개의 문제가 발견 됨을 표시하고 있음
JSLint 연동
 7. Jenkins 그래프로 보기 – 빌드 그리고 확인(2)




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

 연동 방법 개요

 1.   JsTestDriver.jar , JsTestDriver-Qunit adaptor, jscoverage 다운로드
 2.   JsTestDriver.conf 설정
 3.   Ant 빌드 스크립트 작성
 4.   JsTestDriver Running
 5.   테스트 결과를 그래프로 보기 위한 설정(jUnit test result report)
 6.   커버리지 결과를 그래프로 보기 위한 설정(cobertura Plugin설치)
 7.   Cobertura Plugin에서 지원되는 xml타입으로 coverage결과를 변환
JsTestDriver 연동

  1. 다운로드 : JsTestDriver , JsTestDriver-Qunit adaptor, jscoverage
  JsTestDriver.jar ,jscoverage.jar
  http://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변경 메소드 반영 안됨)
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
JsTestDriver 연동

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

  C:coderunjenkinsworkspacejenkins-test> java -jar JsTestDriver.jar --port 4224




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

  4. Ant Build 실행

  C:coderunjenkinsworkspacejenkins-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
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>
JsTestDriver 연동

  6. Build !

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

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

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

  8. Build 후 확인
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 설정>
JsTestDriver 연동

  9. Cobertura Plugin에서 지원되는 xml타입으로 coverage결과를 변환
  Ant build에 python script 실행 추가

  <target name="start" depends="jstestdriver" description="build python script">
            <echo>build python for making cobertura xml</echo>
            <exec executable="C:Python27python.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>
JsTestDriver 연동

  10. Project 설정에 corbetura 추가
JsTestDriver 연동
  1. Build 후 coverage 결과 확인
LOC 연동
 1. LOC(Line of Code)
  NHN Opensource 활용 : https://wiki.jenkins-ci.org/display/JENKINS/NSIQ+Collector+Plugin
  복잡도,LOC를 계산해주지만 LOC만을 활용




  2. project 설정
LOC 연동
 3. Build 후 확인
Complete!
좀 더 해야 할 것
Jstestdriver
test code에서 외부 라이브러리를 사용하는 경우 에러가 발생. Js파일을 로딩하는데 문제가 있음 (require.js와
같은 것으로 동적로딩 필요)



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



Other Testing
Selenium, WebDriver, or PhantomJS
Mobile 환경 테스트


Other CI (Travis CI)
Github 와 찰떡 궁합으로 경량화된 CI
http://blog.outsider.ne.kr/779
http://tech.qmetric.co.uk/automating-javascript-ci-with-buster-js-and-travisci_205.html
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개발
참고
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.html
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-stack

Más contenido relacionado

La actualidad más candente

bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포KwangSeob Jeong
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
오래된 프로젝트에 Jenkins 적용해보기
오래된 프로젝트에 Jenkins 적용해보기오래된 프로젝트에 Jenkins 적용해보기
오래된 프로젝트에 Jenkins 적용해보기용호 최
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현NAVER Engineering
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android 종국 임
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기Haze Lee
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejsNAVER D2
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)우용 김
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodedpTablo
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Juwon Kim
 

La actualidad más candente (20)

Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
오래된 프로젝트에 Jenkins 적용해보기
오래된 프로젝트에 Jenkins 적용해보기오래된 프로젝트에 Jenkins 적용해보기
오래된 프로젝트에 Jenkins 적용해보기
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejs
 
Maven
MavenMaven
Maven
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
Jenkins
JenkinsJenkins
Jenkins
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 

Destacado

최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013
최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013
최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013devCAT Studio, NEXON
 
JavaScript defer & async
JavaScript defer & asyncJavaScript defer & async
JavaScript defer & asyncSeung-Hyun PAEK
 
프론트엔드 개발자
프론트엔드 개발자프론트엔드 개발자
프론트엔드 개발자jung kyunghwan
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016
AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016
AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016Amazon Web Services Korea
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시태현 김
 
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!SangHoon Han
 
비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4민태 김
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple OverviewKim Hunmin
 
Deview 2015 review
Deview 2015 reviewDeview 2015 review
Deview 2015 review석규 오
 
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 

Destacado (12)

최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013
최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013
최호영, TYPESCRIPT - Javascript의 안정성을 높이기 위한 시도, NDC2013
 
JavaScript defer & async
JavaScript defer & asyncJavaScript defer & async
JavaScript defer & async
 
프론트엔드 개발자
프론트엔드 개발자프론트엔드 개발자
프론트엔드 개발자
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016
AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016
AWS 천재가 된 홍대리 10가지 팁:: Megazone 박세진 ::AWS Summit Seoul 2016
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
 
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
 
비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple Overview
 
Deview 2015 review
Deview 2015 reviewDeview 2015 review
Deview 2015 review
 
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 

Similar a Jenkins를 활용한 javascript 개발

[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기hanbeom Park
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우Arawn Park
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기Huey Park
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfLee Dong Wook
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rdPark Jonggun
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Jiam Seo
 
Node.js
Node.jsNode.js
Node.jsymtech
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Sangon Lee
 

Similar a Jenkins를 활용한 javascript 개발 (20)

okspring3x
okspring3xokspring3x
okspring3x
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 
Nest js 101
Nest js 101Nest js 101
Nest js 101
 
Internship backend
Internship backendInternship backend
Internship backend
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdf
 
요즘웹개발
요즘웹개발요즘웹개발
요즘웹개발
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기
 
Node.js
Node.jsNode.js
Node.js
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 

Más de 지수 윤

코드스쿼드 마스터즈세미나 - UI개발자가돼보자
코드스쿼드 마스터즈세미나 - UI개발자가돼보자코드스쿼드 마스터즈세미나 - UI개발자가돼보자
코드스쿼드 마스터즈세미나 - UI개발자가돼보자지수 윤
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development지수 윤
 
개발자를 알아보자.
개발자를 알아보자.개발자를 알아보자.
개발자를 알아보자.지수 윤
 
재사용UI 컴포넌트설계
재사용UI 컴포넌트설계재사용UI 컴포넌트설계
재사용UI 컴포넌트설계지수 윤
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React지수 윤
 
WEB Front-End 개발과정 살펴보기
WEB Front-End 개발과정 살펴보기WEB Front-End 개발과정 살펴보기
WEB Front-End 개발과정 살펴보기지수 윤
 
크로스브라우징
크로스브라우징크로스브라우징
크로스브라우징지수 윤
 
재사용가능한 서비스코드제작
재사용가능한 서비스코드제작재사용가능한 서비스코드제작
재사용가능한 서비스코드제작지수 윤
 
WEBUI Advanced중간시험
WEBUI Advanced중간시험WEBUI Advanced중간시험
WEBUI Advanced중간시험지수 윤
 
비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료지수 윤
 
JavaScript OOP Pattern
JavaScript OOP PatternJavaScript OOP Pattern
JavaScript OOP Pattern지수 윤
 
JS특징(scope,this,closure)
JS특징(scope,this,closure)JS특징(scope,this,closure)
JS특징(scope,this,closure)지수 윤
 
JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)지수 윤
 
JavaScript Debugging (동영상강의자료)
JavaScript Debugging (동영상강의자료)JavaScript Debugging (동영상강의자료)
JavaScript Debugging (동영상강의자료)지수 윤
 
더 나은 SW프로젝트를 위해
 더 나은 SW프로젝트를 위해 더 나은 SW프로젝트를 위해
더 나은 SW프로젝트를 위해지수 윤
 
9주 DOM & Event Advanced
9주  DOM & Event Advanced9주  DOM & Event Advanced
9주 DOM & Event Advanced지수 윤
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2지수 윤
 
7주 JavaScript Part1
7주 JavaScript Part17주 JavaScript Part1
7주 JavaScript Part1지수 윤
 

Más de 지수 윤 (20)

HTML,CSS Next
HTML,CSS NextHTML,CSS Next
HTML,CSS Next
 
코드스쿼드 마스터즈세미나 - UI개발자가돼보자
코드스쿼드 마스터즈세미나 - UI개발자가돼보자코드스쿼드 마스터즈세미나 - UI개발자가돼보자
코드스쿼드 마스터즈세미나 - UI개발자가돼보자
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
 
개발자를 알아보자.
개발자를 알아보자.개발자를 알아보자.
개발자를 알아보자.
 
재사용UI 컴포넌트설계
재사용UI 컴포넌트설계재사용UI 컴포넌트설계
재사용UI 컴포넌트설계
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React
 
WEB Front-End 개발과정 살펴보기
WEB Front-End 개발과정 살펴보기WEB Front-End 개발과정 살펴보기
WEB Front-End 개발과정 살펴보기
 
크로스브라우징
크로스브라우징크로스브라우징
크로스브라우징
 
재사용가능한 서비스코드제작
재사용가능한 서비스코드제작재사용가능한 서비스코드제작
재사용가능한 서비스코드제작
 
WEBUI Advanced중간시험
WEBUI Advanced중간시험WEBUI Advanced중간시험
WEBUI Advanced중간시험
 
비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료비동기와 이벤트큐 수업자료
비동기와 이벤트큐 수업자료
 
JavaScript OOP Pattern
JavaScript OOP PatternJavaScript OOP Pattern
JavaScript OOP Pattern
 
JS특징(scope,this,closure)
JS특징(scope,this,closure)JS특징(scope,this,closure)
JS특징(scope,this,closure)
 
JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)JavaScript Debugging (수업자료)
JavaScript Debugging (수업자료)
 
JavaScript Debugging (동영상강의자료)
JavaScript Debugging (동영상강의자료)JavaScript Debugging (동영상강의자료)
JavaScript Debugging (동영상강의자료)
 
CSS Layout
CSS LayoutCSS Layout
CSS Layout
 
더 나은 SW프로젝트를 위해
 더 나은 SW프로젝트를 위해 더 나은 SW프로젝트를 위해
더 나은 SW프로젝트를 위해
 
9주 DOM & Event Advanced
9주  DOM & Event Advanced9주  DOM & Event Advanced
9주 DOM & Event Advanced
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2
 
7주 JavaScript Part1
7주 JavaScript Part17주 JavaScript Part1
7주 JavaScript Part1
 

Jenkins를 활용한 javascript 개발

  • 2. About me 윤지수 aniga75@gamil.com
  • 4. 지속적인 통합 : continuous integration (CI) 1. Watch code 2. Build Project 3. Run Tests 4. Publish Results
  • 6. Jenkins vs. Hudson Java.net을 사용하던 Hudson은 SUN이 Oracle에 인수된 이후 Oracle의 ‘Hudson’상표권 주장으로 Jenkins으로 분리
  • 7. Jenkins vs. Hudson 비슷하다 (설정, 플러그인 등)
  • 8. Jenkins 의 실체 : jenkins.war + web server
  • 11. 오해 CI 구축은 어렵다 Javascript 프로젝트의 CI구축은 더 어렵다 CI 운영비용은 비싸다 CI는 규모가 있는 프로젝트에서만 하는 것이 다
  • 12. Today’s Goal? : Javascript CI 환경 만들기 Jenkins와 함께 쉽게 !
  • 13. 할 짓 요약 Jenkins 설치 소스 보관소 연동 코드가 좋은 코드인지 확인 코드가 잘 돌아가는 건지 확인 코드량이 얼마인지 확인
  • 14. Jenkins 설치 소스 보관소 연동 Github JSLint 코드가 좋은 코드인지 확인 JSLint 결과 Jenkins에서 시각화 Testing framework : Qunit 테스트 자동화 : JsTestDriver 코드가 잘 돌아가는 건지 확인 코드 커버리지: jscoverage Test결과(jUnit test result Plugin) 테스트 결과를 jenkins에서 시각 화 Coverage 결과(cobertura Plugin) 코드량이 얼마인지 확인 N’Siq Plugin
  • 15. 이런 젠장, 뭔가 복잡해.. 다.. 기억하지 않으셔도 되요.
  • 16. Jenkins설치 1.Download
  • 17. Jenkins설치 2. install
  • 18. Jenkins설치 3. Window service
  • 19. Jenkins설치 4. Browser 확인
  • 20. Jenkins설치 5. Jenkins Plugins 설치 방법
  • 21. Jenkins설치 6. 새로운 프로젝트 생성!
  • 22. Jenkins설치 6. 새로운 프로젝트 생성!
  • 23. Jenkins설치 6. 새로운 프로젝트 생성!
  • 24. Git 연동 1. Download github plugin 2. local 에 git 설치 http://git-scm.com/downloads 3. Jenkins 설정 - git
  • 25. Git 연동 project에 설정하기
  • 27. JSLint 연동 연동 방법 개요 1. JSLint의 Java버전을 다운로드 2. Jenkins에 Ant 빌드 스크립트로 실행 3. Jenkins에서 그래프로 보여주기 위해서 Violations Plugin설치 4. Build
  • 28. JSLint 연동 1. Download JSLint4Java http://code.google.com/p/jslint4java/downloads 2. Ant Build 파일 만들기 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>
  • 29. JSLint 연동 3. project 설정에 추가하기
  • 30. JSLint 연동 4. 확인 (result.xml)
  • 31. JSLint 연동 5. Jenkins 그래프로 보기 – violations plugin 설치 6. Jenkins 그래프로 보기 – project 설정
  • 32. JSLint 연동 7. Jenkins 그래프로 보기 – 빌드 그리고 확인(1) 70개의 문제가 발견 됨을 표시하고 있음
  • 33. JSLint 연동 7. Jenkins 그래프로 보기 – 빌드 그리고 확인(2) 파일별로 오류 내용을 확인 할 수 있음
  • 34. JsTestDriver 연동 연동 방법 개요 1. JsTestDriver.jar , JsTestDriver-Qunit adaptor, jscoverage 다운로드 2. JsTestDriver.conf 설정 3. Ant 빌드 스크립트 작성 4. JsTestDriver Running 5. 테스트 결과를 그래프로 보기 위한 설정(jUnit test result report) 6. 커버리지 결과를 그래프로 보기 위한 설정(cobertura Plugin설치) 7. Cobertura Plugin에서 지원되는 xml타입으로 coverage결과를 변환
  • 35. JsTestDriver 연동 1. 다운로드 : JsTestDriver , JsTestDriver-Qunit adaptor, jscoverage JsTestDriver.jar ,jscoverage.jar http://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변경 메소드 반영 안됨)
  • 36. 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
  • 37. JsTestDriver 연동 3. 잠깐! JsTestDriver는 CI와 별개로 별도로 달리고 있어야 함 C:coderunjenkinsworkspacejenkins-test> java -jar JsTestDriver.jar --port 4224 Jenkins 설치 Git 연동 JSLint 연동 jsTestDriver 연동 LOC
  • 38. JsTestDriver 연동 4. Ant Build 실행 C:coderunjenkinsworkspacejenkins-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
  • 39. 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>
  • 40. JsTestDriver 연동 6. Build ! 테스트 결과 : TEST-Chrome_210118083_Windows.DefaultaModule.xml 테스트 커버리지 : jsTestDriver.conf-coverage.dat
  • 41. JsTestDriver 연동 7. 테스트 결과를 그래프로 보기 위한 projcet 설정(jUnit test result report) 동작 방식 : ‘TEST-Chrome_210118083_Windows.DefaultaModule.xml’ 파일을 분석해서 결과를 보여줌.
  • 42. JsTestDriver 연동 8. Build 후 확인
  • 43. 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 설정>
  • 44. JsTestDriver 연동 9. Cobertura Plugin에서 지원되는 xml타입으로 coverage결과를 변환 Ant build에 python script 실행 추가 <target name="start" depends="jstestdriver" description="build python script"> <echo>build python for making cobertura xml</echo> <exec executable="C:Python27python.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>
  • 45. JsTestDriver 연동 10. Project 설정에 corbetura 추가
  • 46. JsTestDriver 연동 1. Build 후 coverage 결과 확인
  • 47. LOC 연동 1. LOC(Line of Code) NHN Opensource 활용 : https://wiki.jenkins-ci.org/display/JENKINS/NSIQ+Collector+Plugin 복잡도,LOC를 계산해주지만 LOC만을 활용 2. project 설정
  • 48. LOC 연동 3. Build 후 확인
  • 50.
  • 51. 좀 더 해야 할 것 Jstestdriver test code에서 외부 라이브러리를 사용하는 경우 에러가 발생. Js파일을 로딩하는데 문제가 있음 (require.js와 같은 것으로 동적로딩 필요) 복잡도, 중복코드 검사 Cyclomatic complexity 나 중복코드 검사 Plugin 연동 Reporting Other Testing Selenium, WebDriver, or PhantomJS Mobile 환경 테스트 Other CI (Travis CI) Github 와 찰떡 궁합으로 경량화된 CI http://blog.outsider.ne.kr/779 http://tech.qmetric.co.uk/automating-javascript-ci-with-buster-js-and-travisci_205.html
  • 52. 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개발
  • 53. 참고 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.html 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-stack