CI in the Mobile World (한글번역)

6,606 views

Published on

CI in the Mobile World 프리젠테이션을
한글로 번역한 자료입니다.

Published in: Technology
1 Comment
9 Likes
Statistics
Notes
No Downloads
Views
Total views
6,606
On SlideShare
0
From Embeds
0
Number of Embeds
3,176
Actions
Shares
0
Downloads
58
Comments
1
Likes
9
Embeds 0
No embeds

No notes for slide

CI in the Mobile World (한글번역)

  1. 1. CI in the Mobile WorldGodfrey NolanRIIS LLCgodfrey@riis.com
  2. 2. 목차• CI 란 무엇인가?• 모바일 월드에서 CI 의 이득• CI 설정 • Android • iPhone• 아직 진행중인 작업들 • Perfecto Mobile • Test Flight App
  3. 3. 광고 #1• RIIS LLC • Based in Southfield, MI• Clients • Fandango • DTE • Comerica • BCBSM• Mobile Development • DTE Outage Maps • BroadSoft Front Office Assistant
  4. 4. 광고 #2
  5. 5. CI 란 무엇인가?• 모든 것을 자동화• 가능한 한 자주 빌드 • 이른 시간 내, 자주 빌드 • 보통 체크인 할 때마다
  6. 6. CI 란 무엇인가?• 자동화는 …. • 빌드 • 단위 테스트 • 기능 테스트 • 모바일 단말 테스트 • 코드 커버리지 • 배포
  7. 7. CI 의 이득• 더 적은 에러 • iPhone vs. Andriod 이야기• 수동 테스트는 더 이상 없음• 회귀 테스트를 내장
  8. 8. Goal
  9. 9. CI 설정 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  10. 10. CI Server• Jenkins 는 사실상의 산업 표준• 현재 최상의 선택 (기준) • 플러그인의 개수 • 쉬운 사용법• Android 와 iPhone 앱 둘 다에 좋음
  11. 11. CI Server• http://jenkins-ci.org/ 에서 다운로드• 커맨드 라인에서 “java –jar jenkins.war” 실행• 브라우저에서 Jenkins 열기 http://localhost:8080• Hudson 의 명복을 빕니다.
  12. 12. CI Server
  13. 13. CI Server• Manage Jenkins 하위메뉴의 Configure System • ant, JDK, 안드로이드 SDK 패스 추가• Manage Jenkins 하위메뉴의 Plugin Manager • Xcode, GitHub 그리고 TestFlight 설치
  14. 14. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  15. 15. 소스코드 저장소• 제공하는 것들 • 안정성 • 버전 콘트롤 등• Subversion (SVN) 또는 GitHub • Android 프로젝트를 위한 SVN • iPhone 프로젝트를 위한 GitHub
  16. 16. SVN• SVN 호스트에 새 프로젝트 생성
  17. 17. SVN• 간단히 오른 클릭을 사용하는 tortoise svn 을 사용하면, import 라고 한다.• 표준 트렁크 태그와 svn 의 브렌치는 프로젝트 root 에 없기 때문에 Jenkins 안의 build.xml 경로를 지정해야 함을 주의하라.
  18. 18. GitHub• github.com 에서 다운로드• 아래 명령어로 새로운 ssh key 를 생성 ssh-keygen –t rsa –C “your-email”• 프롬프트가 나오면 패스워드 입력• GitHub.com 의 account settings, SSH public keys, SSS Key 를 클릭• id_rsa.pub (public key) 의 내용을 복사하고 입력한 후 Add key 를 클릭
  19. 19. GitHub 계속.• 저장소를 생성하기 위해서 • github.com 에서 create a repository 클릭 • 필요한 필드 채우기 • git init 실행 : 소스코드 디렉토리에서 • git add : 파일이 추가될 때 • git commit – m “메시지” : 저장소에 변경사항 기록 • git push : GitHub 에 push 하기 위해서
  20. 20. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  21. 21. Android 테스트 프로젝트 생성• AndroidCIDemo 라는 프로젝트를 새로 생성하고,Build a free-style software project 선택
  22. 22. Android 테스트 프로젝트 설정• SVN 상세정보 입력• Jenkins 는 입력한 URL 에 연결하지 못하면 경고하는데, 가장 일반적인 이유는 credential 문제로 연결하지 못하는 것이다. credential box 를 클릭하고 입력하라.
  23. 23. Android 테스트 프로젝트 설정 계속.• Build tab 아래에 프로젝트를 실제로 build/run 하는명령이 필요하다.• Add build step 을 클릭하고 execute shell 를 선택. local.properties 파일을 생성하기 위해 android update 명령은반드시 실행되어야 한다. 구문은 다음과 같다 : [path_to_android_sdk]/tools/android update project –p ./[path_to_build.xml]• android tool 이 이미 path 에 있고 build.xml 파일이 루트에 있다면,명령어는 다음과 같다. android update project –p ./• 다른 빌드 단계로 Invoke Ant 를 추가하고, target : debug 를 추가하라. build.xml 파일이 루트에 있지 않다면 advanced 를 클릭하고, build file 필드에 그 경로를 지정하라.
  24. 24. 빌드현재(아래 화면에서) 프로젝트 빌드 그리고희망컨데 에러 없이 실행된다.
  25. 25. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  26. 26. 단위 테스트• Android 에서 단위 테스트를 위해 우리는 JUnit프레임워크의 내장 기능을 사용한다.
  27. 27. 기능 테스트• 우리는 Android 기능 테스트를 위해 Robotium 을 사용한다.• Robotium 은 매우 빠르고 쉽게 기능테스트를 작성할 수 있도록 만든테스트 프레임워크이다. 또한 테스트코드 작성에 적은 지식을 가진팀원들도 테스트 코드를 작성할 수 있다.• Robotium 을 구현하기 위해 테스트 프로젝트 필드 패스에 Robotium 을추가해야 한다.
  28. 28. Android 프로젝트에 대한 수정사항• 단위 테스트와 기능 테스트 모두 같은 방법으로 실행된다.• Jenkins 를 통해 android tests 를 실행하기 위해서 빌드중 에뮬레이터를 실행할 필요가 있다.• Build Environment 아래의 Run an Android emulator during build 를 선택.android avd 를 사용하는 emulator 를이미 생성했다면, Run existing emulator를 선택하고, 그렇지 않다면 Run emulator with properties 를 선택.• OS 버전, 화면밀도(density), 화면 해상도를지정.• 헤드없이 실행하기 위해, Common emulator options 의 Show emulator window 체크 해제
  29. 29. 수정사항 계속.• 다른 실행 명령어 쉘 추가: [path_to_android_sdk]/tools/android update test-project –p ./[path_to_test_project] –m ./[path_to_main_project].• 그리고, 인스톨 테스트를 디버깅하기 위해 ant target 를 변경(루트에 있지 않다면 필드 파일을 바꿀 것을 잊지 말것)
  30. 30. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  31. 31. 다중 설정 잡(job)• Jenkins 는 설정 조합에 따라 실행할 수 있도록 변수 지정에 의한잡 매트릭스를 생성할 수 있다.• Android 를 위해서는 단말간의 동일한 앱 동작을 보장하기 위해여러 다른 에뮬레이터로 기능 테스트를 수행 할 수 있다.
  32. 32. 설정 표(conf. matrixes)• Jenkins 에서 새로운 프로젝트를 생성하고 matrix configuration job 를 선택• 설정의 모든 것은 하나 또는 더 많은 설정표(conf. matrixes) 를 추가해야만 할 때를 제외하면 우리가 테스트를 실행하기 위한 job 을 생성할 때와 같다.
  33. 33. 설정 표(conf. matrixes) 계속.• Configuration Matrix 탭 아래의 add axis 를 선택• Jenkins 는 이름과 값을 물어보는데, 예제로 다른 OS 버전과화면심도를 가진 에뮬레이터를 생성하는 것을 선택할 수 있다.• 이 표는 실제로 4개의 다른 에뮬레이터가 될 것이다.
  34. 34. 에뮬레이터 설정• 지금 우리가 할 일은 어려운 값들 대신에 에뮬레이터를 위해인자로 생성한 변수들을 사용하는 것이다.
  35. 35. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  36. 36. Android 배포• Jenkins에서 빌드된 apk 를 email 로 발송하기 위해서 우리는 email-ext 라 불리는 Jenkins 플러그인을 사용한다.• 플러그인을 다운로드 하려면 home 스크린, manage Jenkins manage plugins 으로 간다. available 을 클릭하면, Jenkins 는 email-extension 플러그인을 다운로드 한다.
  37. 37. 이메일 설정• android debug project 에서 Editable Email Notification 탭까지 아래로 스크롤 해서 체크박스를 선택• 수신자, 제목, 메시지를 선택하고, Attachments 에는 **/*.apk 를 입력• advanced add a trigger on success 를 클릭하고 who it should be sent to 선택
  38. 38. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  39. 39. iPhone 테스트 프로젝트 생성• Build a free-style 옵션으로 IPhoneCIDemo 잡을 생성
  40. 40. iPhone 테스트 프로젝트 설정• 소스코드 콘트롤(Soruce Code Man.) 탭에서 GitHub 선택• Repository URL 필드에 프로젝트를 위한 GutHub URL 을 복사하고 기본 브랜치가 아닌 경우 브랜치를 지정
  41. 41. iPhone 테스트 프로젝트 설정 계속.• build 탭에서 XCode 빌드 단계 추가• 빌드하기 원하는 XCode 타겟을 변경하고 루트가 아닌경우 프로젝트 디렉토리와 파일을 지정• XCode SDK 필드를 채우고 default 또는 debug 설정을 변경
  42. 42. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  43. 43. 단위 테스트• iPhone 단위테스트를 위해 우리는 표준 OCunit 테스트 프레임워크를 사용한다.• Jenkins 로부터 단위테스트를 실행하기 위해서 우리는 ruby 스크립트를 사용한다. 이 스크립트는 UI를 터치하는 그 어떤 테스트도 수행할 수 없다.• XCode OCunit 테스트를 JUnit 테스트로 컨버팅 하는 Ocunit2junit 는Christian Hedin 에 의해 만들어진 스크립트이다. Jenkins 는 현재표준 OCunit 프레임워크를 이해하지 못한다.
  44. 44. iPhone 프로젝트를 위한 변경• Jenkins 에서 ruby 스크립트가 동작하려면 Xcode 프로젝트에 가서 테스트 타겟을 위한 build setting 아래의 test host 값을 제거해야 한다.• 새로운 build step 추가: xcodebuild -target yourtarget -configuration Debug -sdk iphonesdk | [path_to_ruby_script]/ocunit2junit.rb• Publish JUnit test result report 를 선택하고, test-report/*.xml 을 입력
  45. 45. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  46. 46. 기능 테스트• RIIS 는 CI 로 부터 우리의 기능테스트를 수행하기 위해 FoneMonkey 를 사용한다.• FoneMonkey 는 스크립트 레코딩 과 확인 단계 추가로 비교적 쉽게 자동화된 테스트를 만들 수 있게 하는 iOS 툴이다.
  47. 47. FoneMonkey• FoneMonkey 를 구현하기 위해 첫 번째로 프라이머리 타깃을 복사하여 새로운 타깃을 만들어야 한다. FoneMonkey 를 사용한다.• FoneMonkey Zip 파일을 다운로드하고 새 타깃에 그것을 추가.• FoneMonkey 타깃의 build phases 탭 아래 binary, libraries탭으로 이동• + 버턴을 클릭하고 CoreGraphics.framework 과 QuartzCore.framework 를 추가• libxml2.dylib 와 SenTestingKit.framework 도 추가• 마지막으로 Build Settings 탭에서 Linking 섹션까지 아래로스크롤하고 Other Linker Flags 를 –all_load 로 세팅
  48. 48. FoneMonkey 계속. • XCode 실행 없이 커맨드 라인으로부터 FoneMonkey 를 실행하기 위해 우리는 TestRunner 를 생성이 필요하다. • FoneMonkey 타깃의 새로운 타깃을 생성 • 빌드 단계 아래에 TestRunner 타깃을 실행하는 스크립트 추가export FONEMONKEY_HOME=~/[Location_of_Fone_Monkey]export FAMILY=[iphone|ipad]export LOG_FILE="$PROJECT_DIR/$TARGETNAME.log“export FONEMONKEY_ENV=$FONEMONKEY_HOME/FoneMonkeyRunner.plist rm -f "$LOG_FILE“$FONEMONKEY_HOME/bin/iphonesim launch "$CODESIGNING_FOLDER_PATH" -verbose -sdk$IPHONEOS_DEPLOYMENT_TARGET -family $FAMILY -stderr “ $LOG_FILE" -env "$FONEMONKEY_ENV“ • 커맨드 라인으로부터 이 타깃을 실행할 수 있고, 그것은 당신을 위해 FoneMonkey 테스트를 수행할 것이다.
  49. 49. FoneMonkey• FoneMonkey TestRunner 를 실행하는 명령어는xcodebuild –target TestRunnerTargetName –sdk iPhonesimulatorsdk –configuration Debug
  50. 50. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  51. 51. iPhone 배포• 새로운 빌드 단계를 추가하고 Xcode 를 선택• 일반필드를 추가하고 빌드 IPA 를 선택하고 keychain 도 잠금 해제. keychain 의 패스워드를 지정해야 할 것이다.
  52. 52. iPhone 배포• 빌드 단계 실행 쉘을 추가하고 다음의 명령어를 추가:cd $WORKSPACE/build/Release-iphoneos/ curl http://testflightapp.com/api/builds.json-F file=@[IPA_FILE_NAME] -F api_token=[API_TOKEN] -F team_token=[TEAM_TOKEN] -F notes=This is an auto deploy build from Jenkins! -F notify=True -F distribution_lists=[DISTRIBUTION_LIST]• 팀 토큰과 API 토큰은 당신의 testflight 계정 으로부터 얻을 수 있다.
  53. 53. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  54. 54. 끝맺음• 진행중인 작업들 • Executable Requirements • Perfecto Mobile (http://www.perfectomobile.com) • Test Flight App (https://testflightapp.com/)• Demo※ infoq.com 의 동영상 강좌와 슬라이드가 있는 원문http://www.infoq.com/presentations/Continuous-Integration-in-the-Mobile-World
  55. 55. 역자 첨부• infoq.com 의 동영상 강좌와 슬라이드가 있는 원문 http://www.infoq.com/presentations/Continuous-Integration-in-the-Mobile-World• 동일한 내용을 slideshare 에 올린 내용 http://www.slideshare.net/godfreynolan/ci-in-the-mobile-world• git 의 codemash 소스 https://github.com/riis/RIIS-CodeMash• git 의 codemash 소스 https://github.com/riis/RIIS-CodeMash
  56. 56. 역자 요약Requirement Android iPhoneCI Server Jenkins Jenkins소스코드 저장소 SVN, Git SVN, Git프로젝트 빌드 Android SDK XCode SDK단위 테스트 JUnit test framwork OCunit -> Ocunit2junit -> JUnit기능 테스트 Robotium for Android FoneMonkey모바일 단말 테스트 상동 상동배포 Jenkins + email-ext Jenkins + testflightapp.com

×