SlideShare a Scribd company logo
CI in the Mobile World
Godfrey Nolan
RIIS LLC
godfrey@riis.com
목차
• CI 란 무엇인가?
• 모바일 월드에서 CI 의 이득
• CI 설정
 • Android
 • iPhone
• 아직 진행중인 작업들
 • Perfecto Mobile
 • Test Flight App
광고 #1
• RIIS LLC
  • Based in Southfield, MI

• Clients
  • Fandango
  • DTE
  • Comerica
  • BCBSM

• Mobile Development
  • DTE Outage Maps
  • BroadSoft Front Office Assistant
광고 #2
CI 란 무엇인가?
• 모든 것을 자동화
• 가능한 한 자주 빌드
 • 이른 시간 내, 자주 빌드
 • 보통 체크인 할 때마다
CI 란 무엇인가?
• 자동화는 ….
 • 빌드
 • 단위 테스트
 • 기능 테스트
 • 모바일 단말 테스트
 • 코드 커버리지
 • 배포
CI 의 이득
• 더 적은 에러
 • iPhone vs. Andriod 이야기


• 수동 테스트는 더 이상 없음
• 회귀 테스트를 내장
Goal
CI 설정
    Requirement   Android   iPhone


    CI Server


    소스코드 저장소


    프로젝트 빌드


    단위 테스트


    기능 테스트


    모바일 단말 테스트


    배포
CI Server
• Jenkins 는 사실상의 산업 표준
• 현재 최상의 선택 (기준)
  • 플러그인의 개수
  • 쉬운 사용법


• Android 와 iPhone 앱 둘 다에 좋음
CI Server
• http://jenkins-ci.org/ 에서 다운로드
• 커맨드 라인에서 “java –jar jenkins.war” 실행
• 브라우저에서 Jenkins 열기
 http://localhost:8080
• Hudson 의 명복을 빕니다.
CI Server
CI Server
• Manage Jenkins 하위메뉴의 Configure System
  • ant, JDK, 안드로이드 SDK 패스 추가

• Manage Jenkins 하위메뉴의 Plugin Manager
  • Xcode, GitHub 그리고 TestFlight 설치
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
소스코드 저장소
• 제공하는 것들
  • 안정성
  • 버전 콘트롤 등


• Subversion (SVN) 또는 GitHub
  • Android 프로젝트를 위한 SVN
  • iPhone 프로젝트를 위한 GitHub
SVN
• SVN 호스트에 새 프로젝트 생성
SVN
• 간단히 오른 클릭을 사용하는 tortoise svn 을 사용하면,
 import 라고 한다.
• 표준 트렁크 태그와 svn 의 브렌치는 프로젝트 root 에
 없기 때문에 Jenkins 안의 build.xml 경로를 지정해야
 함을 주의하라.
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 를 클릭
GitHub 계속.
• 저장소를 생성하기 위해서
 • github.com 에서 create a repository 클릭
 • 필요한 필드 채우기
 • git init 실행 : 소스코드 디렉토리에서
 • git add : 파일이 추가될 때
 • git commit – m “메시지” : 저장소에 변경사항 기록
 • git push : GitHub 에 push 하기 위해서
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
Android 테스트 프로젝트 생성
• AndroidCIDemo 라는 프로젝트를 새로 생성하고,
Build a free-style software project 선택
Android 테스트 프로젝트 설정
• SVN 상세정보 입력
• Jenkins 는 입력한 URL 에 연결하지 못하면 경고하는데,
 가장 일반적인 이유는 credential 문제로 연결하지
 못하는 것이다. credential box 를 클릭하고 입력하라.
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 필드에
 그 경로를 지정하라.
빌드
현재(아래 화면에서) 프로젝트 빌드 그리고
희망컨데 에러 없이 실행된다.
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
단위 테스트
• Android 에서 단위 테스트를 위해 우리는 JUnit
프레임워크의 내장 기능을 사용한다.
기능 테스트
• 우리는 Android 기능 테스트를 위해 Robotium 을 사용한다.
• Robotium 은 매우 빠르고 쉽게 기능테스트를 작성할 수 있도록 만든
테스트 프레임워크이다. 또한 테스트코드 작성에 적은 지식을 가진
팀원들도 테스트 코드를 작성할 수 있다.
• Robotium 을 구현하기 위해 테스트 프로젝트 필드 패스에        Robotium 을
추가해야 한다.
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 체크 해제
수정사항 계속.
• 다른 실행 명령어 쉘 추가:
 [path_to_android_sdk]/tools/android update test-project
 –p ./[path_to_test_project] –m ./[path_to_main_project].
• 그리고, 인스톨 테스트를 디버깅하기 위해 ant target 를 변경
(루트에 있지 않다면 필드 파일을 바꿀 것을 잊지 말것)
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
다중 설정 잡(job)
• Jenkins 는 설정 조합에 따라 실행할 수 있도록 변수 지정에 의한
잡 매트릭스를 생성할 수 있다.
• Android 를 위해서는 단말간의 동일한 앱 동작을 보장하기 위해
여러 다른 에뮬레이터로 기능 테스트를 수행 할 수 있다.
설정 표(conf. matrixes)
• Jenkins 에서 새로운 프로젝트를 생성하고
 matrix configuration job 를 선택
• 설정의 모든 것은 하나 또는 더 많은 설정표(conf. matrixes) 를
 추가해야만 할 때를 제외하면 우리가 테스트를 실행하기
 위한 job 을 생성할 때와 같다.
설정 표(conf. matrixes) 계속.
• Configuration Matrix 탭 아래의 add axis 를 선택
• Jenkins 는 이름과 값을 물어보는데, 예제로 다른 OS 버전과
화면심도를 가진 에뮬레이터를 생성하는 것을 선택할 수 있다.
• 이 표는 실제로 4개의 다른 에뮬레이터가 될 것이다.
에뮬레이터 설정
• 지금 우리가 할 일은 어려운 값들 대신에 에뮬레이터를 위해
인자로 생성한 변수들을 사용하는 것이다.
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
Android 배포
• Jenkins에서 빌드된 apk 를 email 로 발송하기 위해서 우리는
 email-ext 라 불리는 Jenkins 플러그인을 사용한다.
• 플러그인을 다운로드 하려면 home 스크린,
 manage Jenkins manage plugins 으로 간다.
 available 을 클릭하면, Jenkins 는 email-extension 플러그인을
 다운로드 한다.
이메일 설정
• android debug project 에서 Editable Email Notification 탭까지
 아래로 스크롤 해서 체크박스를 선택
• 수신자, 제목, 메시지를 선택하고, Attachments 에는 **/*.apk 를 입력
• advanced add a trigger
 on success 를 클릭하고
 who it should be sent to
 선택
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
iPhone 테스트 프로젝트 생성
• Build a free-style 옵션으로 IPhoneCIDemo 잡을 생성
iPhone 테스트 프로젝트 설정
• 소스코드 콘트롤(Soruce Code Man.) 탭에서 GitHub 선택
• Repository URL 필드에 프로젝트를 위한 GutHub URL 을 복사하고
 기본 브랜치가 아닌 경우 브랜치를 지정
iPhone 테스트 프로젝트 설정 계속.
• build 탭에서 XCode 빌드 단계 추가
• 빌드하기 원하는 XCode 타겟을 변경하고 루트가 아닌경우
 프로젝트 디렉토리와 파일을 지정
• XCode SDK 필드를 채우고 default 또는 debug 설정을 변경
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
단위 테스트
• iPhone 단위테스트를 위해 우리는 표준 OCunit 테스트
 프레임워크를 사용한다.
• Jenkins 로부터 단위테스트를 실행하기 위해서 우리는
 ruby 스크립트를 사용한다. 이 스크립트는 UI를 터치하는
 그 어떤 테스트도 수행할 수 없다.
• XCode OCunit 테스트를 JUnit 테스트로 컨버팅 하는 Ocunit2junit 는
Christian Hedin 에 의해 만들어진 스크립트이다. Jenkins 는 현재
표준 OCunit 프레임워크를 이해하지 못한다.
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 을 입력
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
기능 테스트
• RIIS 는 CI 로 부터 우리의 기능테스트를 수행하기 위해
 FoneMonkey 를 사용한다.
• FoneMonkey 는 스크립트 레코딩 과
 확인 단계 추가로 비교적 쉽게
 자동화된 테스트를 만들 수
 있게 하는 iOS 툴이다.
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 로 세팅
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 테스트를 수행할 것이다.
FoneMonkey
• FoneMonkey TestRunner 를 실행하는 명령어는
xcodebuild –target TestRunnerTargetName –sdk
  iPhonesimulatorsdk –configuration Debug
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
iPhone 배포
• 새로운 빌드 단계를 추가하고 Xcode 를 선택
• 일반필드를 추가하고 빌드 IPA 를 선택하고 keychain 도 잠금 해제.
 keychain 의 패스워드를 지정해야 할 것이다.
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 계정 으로부터 얻을 수 있다.
CI 에 대한 요구사항
   Requirement   Android   iPhone


   CI Server


   소스코드 저장소


   프로젝트 빌드


   단위 테스트


   기능 테스트


   모바일 단말 테스트


   배포
끝맺음
• 진행중인 작업들
   • 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
역자 첨부
• 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
역자 요약
Requirement   Android                iPhone

CI 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

More Related Content

What's hot

swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
NAVER D2
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
Chanwoong Kim
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
NAVER D2
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
KwangSeob Jeong
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
KwangSeob Jeong
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
NAVER D2
 
[네이버오픈소스세미나] 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
 
React native development
React native developmentReact native development
React native development
SangSun Park
 
Google app engine
Google app engineGoogle app engine
Google app enginescor7910
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
Donghyun Seo
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅
Chanwoong Kim
 
실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기
Haze Lee
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
NAVER D2
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기
DomainDriven DomainDriven
 
신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기
none
 
자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅
Yoonsung Jung
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
중선 곽
 
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
Leonardo YongUk Kim
 

What's hot (20)

swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
 
React native development
React native developmentReact native development
React native development
 
Google app engine
Google app engineGoogle app engine
Google app engine
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅Kgc2014 삼한제국기 포스트모템 김찬웅
Kgc2014 삼한제국기 포스트모템 김찬웅
 
실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기
 
신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기
 
자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅자바 웹프로젝트 개발환경 셋팅
자바 웹프로젝트 개발환경 셋팅
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
 

Viewers also liked

The New DevOps Designers: Cloud and The Big Rethink
The New DevOps Designers: Cloud and The Big RethinkThe New DevOps Designers: Cloud and The Big Rethink
The New DevOps Designers: Cloud and The Big Rethink
James Urquhart
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)MinGeun Park
 
dating, software
dating, softwaredating, software
dating, software
DONGSU KIM
 
Experitest-Infosys Co-Webinar on Mobile Continuous Integration
Experitest-Infosys Co-Webinar on Mobile Continuous IntegrationExperitest-Infosys Co-Webinar on Mobile Continuous Integration
Experitest-Infosys Co-Webinar on Mobile Continuous Integration
Experitest
 
Git & Github Seminar-2
Git & Github Seminar-2Git & Github Seminar-2
Git & Github Seminar-2
sangyun han
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1
sangyun han
 
Maven
MavenMaven
Maven
Suan Lee
 
Making things that work with us - Distill
Making things that work with us - DistillMaking things that work with us - Distill
Making things that work with us - DistillMatteo Collina
 
Making your washing machine talk with a power plant
Making your washing machine talk with a power plantMaking your washing machine talk with a power plant
Making your washing machine talk with a power plantMatteo Collina
 
Eclipse git 튜토리알
Eclipse git 튜토리알Eclipse git 튜토리알
Eclipse git 튜토리알
Mirinae, Inc.
 
Spring환경설정하기
Spring환경설정하기Spring환경설정하기
Spring환경설정하기ChangJoo Park
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
우용 김
 
OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)
OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)
OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)
Karen Jo
 
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
KTH, 케이티하이텔
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Park JoongSoo
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
중선 곽
 
DevOps와 자동화
DevOps와 자동화DevOps와 자동화
DevOps와 자동화
DONGSU KIM
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
Ji-Woong Choi
 

Viewers also liked (19)

The New DevOps Designers: Cloud and The Big Rethink
The New DevOps Designers: Cloud and The Big RethinkThe New DevOps Designers: Cloud and The Big Rethink
The New DevOps Designers: Cloud and The Big Rethink
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
 
dating, software
dating, softwaredating, software
dating, software
 
Experitest-Infosys Co-Webinar on Mobile Continuous Integration
Experitest-Infosys Co-Webinar on Mobile Continuous IntegrationExperitest-Infosys Co-Webinar on Mobile Continuous Integration
Experitest-Infosys Co-Webinar on Mobile Continuous Integration
 
Subversion
SubversionSubversion
Subversion
 
Git & Github Seminar-2
Git & Github Seminar-2Git & Github Seminar-2
Git & Github Seminar-2
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1
 
Maven
MavenMaven
Maven
 
Making things that work with us - Distill
Making things that work with us - DistillMaking things that work with us - Distill
Making things that work with us - Distill
 
Making your washing machine talk with a power plant
Making your washing machine talk with a power plantMaking your washing machine talk with a power plant
Making your washing machine talk with a power plant
 
Eclipse git 튜토리알
Eclipse git 튜토리알Eclipse git 튜토리알
Eclipse git 튜토리알
 
Spring환경설정하기
Spring환경설정하기Spring환경설정하기
Spring환경설정하기
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)
OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)
OKKYxStartup - [SI벗어나기] 김동수(아만다CTO)
 
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
DevOps와 자동화
DevOps와 자동화DevOps와 자동화
DevOps와 자동화
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 

Similar to CI in the Mobile World (한글번역)

AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
Amazon Web Services Korea
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
Chanwoong Kim
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016
Jongwon Kim
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
정민 안
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
Sewon Ann
 
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
양재동 코드랩
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
Hankyo
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
Jongwon Han
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
hanbeom Park
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기
Manjong Han
 
DevOps Study
DevOps StudyDevOps Study
DevOps Study
상환 이
 
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
인수 장
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
Amazon Web Services Korea
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
강 민우
 
Cloud ide를 이용한_모바일_개발의_가능성과_전망
Cloud ide를 이용한_모바일_개발의_가능성과_전망Cloud ide를 이용한_모바일_개발의_가능성과_전망
Cloud ide를 이용한_모바일_개발의_가능성과_전망Sung-tae Ryu
 
Unity소개
Unity소개Unity소개
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
Seok-yong Kim
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
ssuserb942d2
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
Chris Ohk
 

Similar to CI in the Mobile World (한글번역) (20)

AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기
 
DevOps Study
DevOps StudyDevOps Study
DevOps Study
 
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
 
Cloud ide를 이용한_모바일_개발의_가능성과_전망
Cloud ide를 이용한_모바일_개발의_가능성과_전망Cloud ide를 이용한_모바일_개발의_가능성과_전망
Cloud ide를 이용한_모바일_개발의_가능성과_전망
 
Unity소개
Unity소개Unity소개
Unity소개
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 

CI in the Mobile World (한글번역)

  • 1. CI in the Mobile World Godfrey Nolan RIIS LLC godfrey@riis.com
  • 2. 목차 • CI 란 무엇인가? • 모바일 월드에서 CI 의 이득 • CI 설정 • Android • iPhone • 아직 진행중인 작업들 • Perfecto Mobile • Test Flight App
  • 3. 광고 #1 • RIIS LLC • Based in Southfield, MI • Clients • Fandango • DTE • Comerica • BCBSM • Mobile Development • DTE Outage Maps • BroadSoft Front Office Assistant
  • 5. CI 란 무엇인가? • 모든 것을 자동화 • 가능한 한 자주 빌드 • 이른 시간 내, 자주 빌드 • 보통 체크인 할 때마다
  • 6. CI 란 무엇인가? • 자동화는 …. • 빌드 • 단위 테스트 • 기능 테스트 • 모바일 단말 테스트 • 코드 커버리지 • 배포
  • 7. CI 의 이득 • 더 적은 에러 • iPhone vs. Andriod 이야기 • 수동 테스트는 더 이상 없음 • 회귀 테스트를 내장
  • 9. CI 설정 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 10. CI Server • Jenkins 는 사실상의 산업 표준 • 현재 최상의 선택 (기준) • 플러그인의 개수 • 쉬운 사용법 • Android 와 iPhone 앱 둘 다에 좋음
  • 11. CI Server • http://jenkins-ci.org/ 에서 다운로드 • 커맨드 라인에서 “java –jar jenkins.war” 실행 • 브라우저에서 Jenkins 열기 http://localhost:8080 • Hudson 의 명복을 빕니다.
  • 13. CI Server • Manage Jenkins 하위메뉴의 Configure System • ant, JDK, 안드로이드 SDK 패스 추가 • Manage Jenkins 하위메뉴의 Plugin Manager • Xcode, GitHub 그리고 TestFlight 설치
  • 14.
  • 15.
  • 16. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 17. 소스코드 저장소 • 제공하는 것들 • 안정성 • 버전 콘트롤 등 • Subversion (SVN) 또는 GitHub • Android 프로젝트를 위한 SVN • iPhone 프로젝트를 위한 GitHub
  • 18. SVN • SVN 호스트에 새 프로젝트 생성
  • 19. SVN • 간단히 오른 클릭을 사용하는 tortoise svn 을 사용하면, import 라고 한다. • 표준 트렁크 태그와 svn 의 브렌치는 프로젝트 root 에 없기 때문에 Jenkins 안의 build.xml 경로를 지정해야 함을 주의하라.
  • 20. 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 를 클릭
  • 21.
  • 22. GitHub 계속. • 저장소를 생성하기 위해서 • github.com 에서 create a repository 클릭 • 필요한 필드 채우기 • git init 실행 : 소스코드 디렉토리에서 • git add : 파일이 추가될 때 • git commit – m “메시지” : 저장소에 변경사항 기록 • git push : GitHub 에 push 하기 위해서
  • 23. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 24. Android 테스트 프로젝트 생성 • AndroidCIDemo 라는 프로젝트를 새로 생성하고, Build a free-style software project 선택
  • 25. Android 테스트 프로젝트 설정 • SVN 상세정보 입력 • Jenkins 는 입력한 URL 에 연결하지 못하면 경고하는데, 가장 일반적인 이유는 credential 문제로 연결하지 못하는 것이다. credential box 를 클릭하고 입력하라.
  • 26. 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 필드에 그 경로를 지정하라.
  • 27.
  • 28. 빌드 현재(아래 화면에서) 프로젝트 빌드 그리고 희망컨데 에러 없이 실행된다.
  • 29. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 30. 단위 테스트 • Android 에서 단위 테스트를 위해 우리는 JUnit 프레임워크의 내장 기능을 사용한다.
  • 31. 기능 테스트 • 우리는 Android 기능 테스트를 위해 Robotium 을 사용한다. • Robotium 은 매우 빠르고 쉽게 기능테스트를 작성할 수 있도록 만든 테스트 프레임워크이다. 또한 테스트코드 작성에 적은 지식을 가진 팀원들도 테스트 코드를 작성할 수 있다. • Robotium 을 구현하기 위해 테스트 프로젝트 필드 패스에 Robotium 을 추가해야 한다.
  • 32. 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 체크 해제
  • 33. 수정사항 계속. • 다른 실행 명령어 쉘 추가: [path_to_android_sdk]/tools/android update test-project –p ./[path_to_test_project] –m ./[path_to_main_project]. • 그리고, 인스톨 테스트를 디버깅하기 위해 ant target 를 변경 (루트에 있지 않다면 필드 파일을 바꿀 것을 잊지 말것)
  • 34. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 35. 다중 설정 잡(job) • Jenkins 는 설정 조합에 따라 실행할 수 있도록 변수 지정에 의한 잡 매트릭스를 생성할 수 있다. • Android 를 위해서는 단말간의 동일한 앱 동작을 보장하기 위해 여러 다른 에뮬레이터로 기능 테스트를 수행 할 수 있다.
  • 36. 설정 표(conf. matrixes) • Jenkins 에서 새로운 프로젝트를 생성하고 matrix configuration job 를 선택 • 설정의 모든 것은 하나 또는 더 많은 설정표(conf. matrixes) 를 추가해야만 할 때를 제외하면 우리가 테스트를 실행하기 위한 job 을 생성할 때와 같다.
  • 37. 설정 표(conf. matrixes) 계속. • Configuration Matrix 탭 아래의 add axis 를 선택 • Jenkins 는 이름과 값을 물어보는데, 예제로 다른 OS 버전과 화면심도를 가진 에뮬레이터를 생성하는 것을 선택할 수 있다. • 이 표는 실제로 4개의 다른 에뮬레이터가 될 것이다.
  • 38. 에뮬레이터 설정 • 지금 우리가 할 일은 어려운 값들 대신에 에뮬레이터를 위해 인자로 생성한 변수들을 사용하는 것이다.
  • 39. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 40. Android 배포 • Jenkins에서 빌드된 apk 를 email 로 발송하기 위해서 우리는 email-ext 라 불리는 Jenkins 플러그인을 사용한다. • 플러그인을 다운로드 하려면 home 스크린, manage Jenkins manage plugins 으로 간다. available 을 클릭하면, Jenkins 는 email-extension 플러그인을 다운로드 한다.
  • 41. 이메일 설정 • android debug project 에서 Editable Email Notification 탭까지 아래로 스크롤 해서 체크박스를 선택 • 수신자, 제목, 메시지를 선택하고, Attachments 에는 **/*.apk 를 입력 • advanced add a trigger on success 를 클릭하고 who it should be sent to 선택
  • 42. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 43. iPhone 테스트 프로젝트 생성 • Build a free-style 옵션으로 IPhoneCIDemo 잡을 생성
  • 44. iPhone 테스트 프로젝트 설정 • 소스코드 콘트롤(Soruce Code Man.) 탭에서 GitHub 선택 • Repository URL 필드에 프로젝트를 위한 GutHub URL 을 복사하고 기본 브랜치가 아닌 경우 브랜치를 지정
  • 45. iPhone 테스트 프로젝트 설정 계속. • build 탭에서 XCode 빌드 단계 추가 • 빌드하기 원하는 XCode 타겟을 변경하고 루트가 아닌경우 프로젝트 디렉토리와 파일을 지정 • XCode SDK 필드를 채우고 default 또는 debug 설정을 변경
  • 46.
  • 47. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 48. 단위 테스트 • iPhone 단위테스트를 위해 우리는 표준 OCunit 테스트 프레임워크를 사용한다. • Jenkins 로부터 단위테스트를 실행하기 위해서 우리는 ruby 스크립트를 사용한다. 이 스크립트는 UI를 터치하는 그 어떤 테스트도 수행할 수 없다. • XCode OCunit 테스트를 JUnit 테스트로 컨버팅 하는 Ocunit2junit 는 Christian Hedin 에 의해 만들어진 스크립트이다. Jenkins 는 현재 표준 OCunit 프레임워크를 이해하지 못한다.
  • 49. 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 을 입력
  • 50. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 51. 기능 테스트 • RIIS 는 CI 로 부터 우리의 기능테스트를 수행하기 위해 FoneMonkey 를 사용한다. • FoneMonkey 는 스크립트 레코딩 과 확인 단계 추가로 비교적 쉽게 자동화된 테스트를 만들 수 있게 하는 iOS 툴이다.
  • 52. 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 로 세팅
  • 53. 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 테스트를 수행할 것이다.
  • 54. FoneMonkey • FoneMonkey TestRunner 를 실행하는 명령어는 xcodebuild –target TestRunnerTargetName –sdk iPhonesimulatorsdk –configuration Debug
  • 55. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 56. iPhone 배포 • 새로운 빌드 단계를 추가하고 Xcode 를 선택 • 일반필드를 추가하고 빌드 IPA 를 선택하고 keychain 도 잠금 해제. keychain 의 패스워드를 지정해야 할 것이다.
  • 57. 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 계정 으로부터 얻을 수 있다.
  • 58. CI 에 대한 요구사항 Requirement Android iPhone CI Server 소스코드 저장소 프로젝트 빌드 단위 테스트 기능 테스트 모바일 단말 테스트 배포
  • 59. 끝맺음 • 진행중인 작업들 • 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
  • 60. 역자 첨부 • 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
  • 61. 역자 요약 Requirement Android iPhone CI 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