티스토리 뷰

Bitrise를 사용하여 빌드, 테스트를 자동화 합니다. CocoaPods과 Carthage를 사용하는 방법도 정리해보았어요.

 

www.bitrise.io

 

Bitrise - Mobile Continuous Integration and Delivery

Continuous integration and delivery built for mobile: Automate iOS and Android builds, testing and deployment from your first install to the one millionth.

www.bitrise.io

 

CI/CD를 테스트하기 위한 조건으로 간단한 프로젝트를 만들었고 모두 동일하게 아래의 조건을 적용하였어요.

- CocoaPods으로 SDWebImage를 추가하고 ViewController에 SDWebImage를 import

- Carthage로 Alamofire를 추가하고 ViewController에 Alamofire를 import

- Unit Test를 확인하기 위해서 성공 또는 실패 case 추가

https://github.com/jhseo/BitriseTest/commit/a671aab787bab486de7454b8a101c08176d64144

 

 

 

프로젝트 설정 - CocoaPods 추가하기

pod init을 해서 Podfile을 만들어 줍니다.

$ pod init

 

SDWebImage를 추가합니다.

 

pod install을 해서 Podfile.lock을 생성합니다.

(Bitrise의 Build Machine이 CocoaPods 1.9.1 버전을 사용하고 있는데 여기서는 Gemfile.lock을 사용하는 등의 설명을 생략하기 위해 1.9.1로 맞췄어요)

$ pod _1.9.1_ install

 

ViewController에 import SDWebImage 추가했습니다.

 

Testcode도 간단하게 하나 추가해봤어요.

 

여기까지 하시면 준비 끝! 이제 Bitrise 가입하러 가시죠!

 

 

 

Bitrise 가입하기

일단 bitrise에 가입을 합니다. 저는 Sign up with GitHub으로 했어요. 

가입 시 GitHub에 Organization에 속하신 분은 하단에 Request라고 나오는데 Organization의 Repository를 사용하시려면 Request를 눌러서 관리자의 승인을 받아야 합니다. 저는 개인 Repository이기 때문에 skip했어요

 

 

 

Bitrise에 프로젝트 설정하기

Bitrise를 사용할때 log나 설정에 대한 공개 여부를 선택합니다.

저는 공개되도 상관없는 Repository라 Public을 선택했어요.

비밀번호라던지 민감한 정보가 있다면 Private으로 선택해주세요.

 

다음으로는 Bitrise를 사용할 Repository를 선택합니다.

저는 BitriseTest라는 Repository를 만들어 놓아서 BitriseTest를 선택했어요.

 

Bitrise에서 어떤 branch를 기준으로 진행할지에 대한 항목이에요.

저는 master에 다 때려박을꺼라서 master branch를 입력했어요.

 

저의 Repository를 확인하는 과정이에요. (docker를 사용하는 군요.)

 

제 Repository가 iOS 프로젝트라고 하네요. (네 맞아요)

저는 테스트용으로 진행할거라서 ipa export method를 development로 선택했어요.

 

아니 지금 시대가 어느땐데 Xcode 11.1인가요?

Edit를 눌러봅니다.

 

일단 원활한(?) 테스트를 위해서 Xcode 11.7로 선택했어요.

 

테스트 프로젝트라서 icon은 선택안하고 Skip for now를 눌렀어요.

Webhook도 지금은 필요없을 것 같아 Skip

 

설정이 끝나면 성격이 급한 이 친구는 빌드를 시작해버립니다.

 

처음 맛본 Failed.. CocoaPods가 없으니 import SDWebImage에서 Fail이 발생하였어요.

그럼 빨리 CocoaPods를 install하도록 설정하러 가시죠!

 

 

 

CocoaPods 빌드하기

Dashboard를 눌러서 오른쪽의 앱을 선택합니다. (왼쪽 빌드는 무시해주세요. 삽질의 흔적)

 

Workflow 탭을 눌러줍니다.

 

맨 오른쪽에 bitrise.yml 탭을 눌러줍니다.

yml 파일을 보시면 trigger일때 workflow는 primary로 되어 있네요

 

primary쪽의 script를 아래와 같이 수정합니다.

네 맞아요 우리가 잘 알고 있는 CocoaPods을 install하는 명령어에요.

- script@1:
    inputs:
    - content: pod install --repo-update
    - title: Install Dependecies

CocoaPods을 사용하면 workspace를 사용하기 때문에 xcodeproj을 xcworkspace로 변경해 줍니다.

 

 

build를 돌려봅니다.

build는 Dashboard에서 앱을 선택하면 오른쪽에 Start/Schedule a Build라는 버튼을 누르시면 되요

 

우리가 작성한 script가 실행되고 framework가 설치되는 것을 볼 수 있어요.

 

테스트도 성공!

 

4분 7초가 걸렸네요. 어쨌든 Success

 

 

 

CocoaPods Cache 적용하기

저는 Repository에 Pods 폴더를 추가하지 않았기 때문에 처음 빌드하려면 pod install을 해야되요.

그런데 매번 pod install을 한다면 불필요한 시간이 소요되기 때문에 Pods 폴더를 처음에만 생성하도록 Cache를 설정하였어요.

 

bitrise.yml을 수정해봅니다. 어딘지 아시죠?

아래와 같이 cache-push를 수정해줍니다.

- cache-push@2:
    inputs:
    - cache_paths: ./Pods -> ./Podfile.lock

 

다시 빌드해봅니다

저희가 추가한 cache-push 부분을 확인해보면 해당 Path를 cache로 사용하기 위해 archive하는 것을 볼 수 있어요.

안타깝게도 cache-push가 진행되야 다음 빌드붙터 cache-pull을 통해 cache를 불러올 수 있어요.

 

위로 올라가보시면 cache-pull에서 cache를 다운로드 할 수 없다고 나와요.

현재 빌드의 script에서 Pods 폴더가 생성되고 마지막에 cache-push를 진행하기 때문이죠.

그럼 다음 빌드에서는 cache-pull로 push된 cache를 불러오는지 한번 더 돌려볼까요?

 

다시 빌드했어요. 

Done이라는 단어는 언제 들어도 좋은 것 같아요. 제대로 cache를 불러온 것 같네요!

 

script 쪽을 확인해보시면 pod install 진행할 때 SDWebImage를 install하지 않은 것을 확인할 수 있어요.

cache-pull로 /Pods를 가져왔기 때문이에요.

 

빌드가 끝났습니다. 4분이네요. 조~~~금 줄었어요.

지금 framework를 SDWebImage 하나만 사용하기도 했고 CocoaPods의 경우 프로젝트를 빌드할 때 framework를 함께 빌드하기 때문에 그렇게 크게 차이나지 않는 것 같아요. 어쨌든 Success!

 

 

 

프로젝트 설정 - Carthage 추가하기

Cartfile을 추가하고 Alamofire를 추가합니다.

$ vi Cartfile

 

Carthage를 빌드합니다.

$ carthage bootstrap --platform iOS --cache-builds

 

Project Target의 Build Phases에서 Carthage/Build/iOS/Alamofire에 있는 Alamofire.framework를 추가해줍니다.

 

왼쪽 상단에 있는 + 버튼을 눌러서 Run Script를 추가하고

아래 script를 작성합니다.

/usr/local/bin/carthage copy-frameworks

그리고 Input Files에 Alamofire.framework의 경로를 추가해줍니다.

 

Carthage로 빌드한 Alamofire가 제대로 동작되는지 확인하기 위해서 ViewController에 import Alamofire를 추가했어요.

 

 

 

Carthage 빌드하기

bitrise.yml에서 아래와 같이 carthage를 빌드하는 명령어를 추가해줍니다.

(여러 줄을 입력할 때는 |- 를 붙이는 걸 잊지마세요!)

- script@1:
    inputs:
    - content: |- 
        carthage bootstrap --platform iOS --cache-builds
        pod install --repo-update
    - title: Install Dependecies

Carthage로 Alamofire를 빌드하고 있어요

 

6분 36초?!!

 

Carthage의 경우에는 framework를 처음 빌드할 때 시간이 오래걸리지만 이후에는 빌드된 framework binary를 사용하기 때문에 프로젝트 빌드가 빠르다는 장점이 있어요.

하지만 framework가 많고 CI에서 매번 빌드한다면 항상 상당한 시간이 소요되겠죠?

Carthage야 말로 Cache가 정말 필요할 것 같아요

Cache 적용하러 가시죠!

 

 

 

Carthage Cache 적용하기

bitrise.yml의 cache-push에 아래와 같이 추가하고 빌드를 해봅니다.

- cache-push@2:
    inputs:
    - cache_paths: |-
        ./Cartfile.resolved
        ./Carthage -> ./Cartfile.resolved
        ./Pods -> ./Podfile.lock

 

script 실행할 때는 아까랑 다른 메시지가 나왔어요.

Valid cache found Alamofire, skipping build

Alamofire를 install하지 않는 것을 볼 수 있어요.

 

cache-push도 추가되었어요. Carthage에 있는 파일들이겠죠?

다시 빌드를 해봅니다.

 

4분 27초?!!! 이 정도면 많이 줄어든 것 같아요. 매번 빌드할때마다 편차는 있지만 CocoaPods 빌드만 진행했을때와 거의 같죠.

Carthage의 경우 앞서 말씀드렸다시피 최초 빌드한 framework을 그대로 사용하기 때문에 CocoaPods만 빌드했을때와 같다고 보면 되요.

 

저는 cache를 사용했을때 얼마나 차이가 나는지 보여드리기 위해서 script쪽과 cache-push쪽을 나눠서 진행했지만 script와 cache-push 둘 다 한번에 적용하시면 됩니다.

 

 

 

테스트 프로젝트는 아래 링크에 있으니 참고하세요!

https://github.com/jhseo/BitriseTest

 

jhseo/BitriseTest

Contribute to jhseo/BitriseTest development by creating an account on GitHub.

github.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함