Jenkins를 활용한 javascript 개발

19,474 views

Published on

Published in: Technology
2 Comments
90 Likes
Statistics
Notes
No Downloads
Views
Total views
19,474
On SlideShare
0
From Embeds
0
Number of Embeds
3,286
Actions
Shares
0
Downloads
329
Comments
2
Likes
90
Embeds 0
No embeds

No notes for slide

Jenkins를 활용한 javascript 개발

  1. 1. Jenkinsfor Javascript Development Env.
  2. 2. About me 윤지수 aniga75@gamil.com
  3. 3. 지속적인 통합> 품질,안전성
  4. 4. 지속적인 통합: continuous integration (CI)1. Watch code2. Build Project3. Run Tests4. Publish Results
  5. 5. 첫째.CI? Jenkins?
  6. 6. Jenkins vs. HudsonJava.net을 사용하던 Hudson은 SUN이 Oracle에 인수된 이후Oracle의 ‘Hudson’상표권 주장으로 Jenkins으로 분리
  7. 7. Jenkins vs. Hudson비슷하다 (설정, 플러그인 등)
  8. 8. Jenkins 의 실체: jenkins.war + web server
  9. 9. Jenkins 의 실체
  10. 10. 둘째.Jenkins 해보기
  11. 11. 오해CI 구축은 어렵다Javascript 프로젝트의 CI구축은 더 어렵다CI 운영비용은 비싸다CI는 규모가 있는 프로젝트에서만 하는 것이다
  12. 12. Today’s Goal?: Javascript CI 환경 만들기 Jenkins와 함께 쉽게 !
  13. 13. 할 짓 요약Jenkins 설치소스 보관소 연동코드가 좋은 코드인지 확인코드가 잘 돌아가는 건지 확인코드량이 얼마인지 확인
  14. 14. Jenkins 설치 소스 보관소 연동 Github JSLint코드가 좋은 코드인지 확인 JSLint 결과 Jenkins에서 시각화 Testing framework : Qunit 테스트 자동화 : JsTestDriver코드가 잘 돌아가는 건지 확인 코드 커버리지: jscoverage Test결과(jUnit test result Plugin) 테스트 결과를 jenkins에서 시각 화 Coverage 결과(cobertura Plugin) 코드량이 얼마인지 확인 N’Siq Plugin
  15. 15. 이런 젠장, 뭔가복잡해..다.. 기억하지않으셔도 되요.
  16. 16. Jenkins설치 1.Download
  17. 17. Jenkins설치 2. install
  18. 18. Jenkins설치 3. Window service
  19. 19. Jenkins설치 4. Browser 확인
  20. 20. Jenkins설치 5. Jenkins Plugins 설치 방법
  21. 21. Jenkins설치 6. 새로운 프로젝트 생성!
  22. 22. Jenkins설치 6. 새로운 프로젝트 생성!
  23. 23. Jenkins설치 6. 새로운 프로젝트 생성!
  24. 24. Git 연동 1. Download github plugin 2. local 에 git 설치 http://git-scm.com/downloads 3. Jenkins 설정 - git
  25. 25. Git 연동 project에 설정하기
  26. 26. Git 연동 확인하기
  27. 27. JSLint 연동 연동 방법 개요 1. JSLint의 Java버전을 다운로드 2. Jenkins에 Ant 빌드 스크립트로 실행 3. Jenkins에서 그래프로 보여주기 위해서 Violations Plugin설치 4. Build
  28. 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. 29. JSLint 연동 3. project 설정에 추가하기
  30. 30. JSLint 연동 4. 확인 (result.xml)
  31. 31. JSLint 연동 5. Jenkins 그래프로 보기 – violations plugin 설치 6. Jenkins 그래프로 보기 – project 설정
  32. 32. JSLint 연동 7. Jenkins 그래프로 보기 – 빌드 그리고 확인(1) 70개의 문제가 발견 됨을 표시하고 있음
  33. 33. JSLint 연동 7. Jenkins 그래프로 보기 – 빌드 그리고 확인(2) 파일별로 오류 내용을 확인 할 수 있음
  34. 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. 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. 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. 37. JsTestDriver 연동 3. 잠깐! JsTestDriver는 CI와 별개로 별도로 달리고 있어야 함 C:coderunjenkinsworkspacejenkins-test> java -jar JsTestDriver.jar --port 4224 Jenkins 설치 Git 연동 JSLint 연동 jsTestDriver 연동 LOC
  38. 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. 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. 40. JsTestDriver 연동 6. Build ! 테스트 결과 : TEST-Chrome_210118083_Windows.DefaultaModule.xml 테스트 커버리지 : jsTestDriver.conf-coverage.dat
  41. 41. JsTestDriver 연동 7. 테스트 결과를 그래프로 보기 위한 projcet 설정(jUnit test result report) 동작 방식 : ‘TEST-Chrome_210118083_Windows.DefaultaModule.xml’ 파일을 분석해서 결과를 보여줌.
  42. 42. JsTestDriver 연동 8. Build 후 확인
  43. 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. 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. 45. JsTestDriver 연동 10. Project 설정에 corbetura 추가
  46. 46. JsTestDriver 연동 1. Build 후 coverage 결과 확인
  47. 47. LOC 연동 1. LOC(Line of Code) NHN Opensource 활용 : https://wiki.jenkins-ci.org/display/JENKINS/NSIQ+Collector+Plugin 복잡도,LOC를 계산해주지만 LOC만을 활용 2. project 설정
  48. 48. LOC 연동 3. Build 후 확인
  49. 49. Complete!
  50. 50. 좀 더 해야 할 것Jstestdrivertest code에서 외부 라이브러리를 사용하는 경우 에러가 발생. Js파일을 로딩하는데 문제가 있음 (require.js와같은 것으로 동적로딩 필요)복잡도, 중복코드 검사Cyclomatic complexity 나 중복코드 검사 Plugin 연동 ReportingOther TestingSelenium, WebDriver, or PhantomJSMobile 환경 테스트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
  51. 51. 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/87523http://www.slideshare.net/jscamp_kr/jscamp-hannam-qunit-test-automation-using-hudson-and-seleniumDashboard, JIRA 연동중복코드 검사기타 프로젝트별 Build에 필요한 Hudson Plugin개발
  52. 52. 참고http://wiki.hudson-ci.org/display/HUDSON/Pluginshttp://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/downloadshttp://meri-stuff.blogspot.kr/2012/01/javascript-testing-with-jstestdriver.htmlhttp://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-stackhttp://www.python.org/getit/https://wiki.jenkins-ci.org/display/JENKINS/NSIQ+Collector+Pluginhttp://pseudobry.com/js-test-driver-qunit-coverage-requirejs/https://github.com/youzee/tips-n-tricks/wiki/The-JavaScript-testing-stack

×