iOS

iOS Continuous CI / CD 구축해보자! - Overview

iOS_Assin 2019. 10. 17. 21:17

이 포스팅은 "iOS Continuous CI / CD 구축해보자!"의 Series  중 일부입니다.

1. iOS Continuous CI / CD 구축해보자! - Overview

2. iOS Continuous CI / CD 구축해보자! - XCConfig

3. iOS Continuous CI / CD 구축해보자! - Travis CI (준비중)

4. iOS Continuous CI / CD 구축해보자! - Fastlane (준비중)

5. iOS Continuous CI / CD 구축해보자! - Codecov (준비중)

 

 

 

Continuous Integration, Continuous Delivery, Continuous Deployment? 

아래 그림은 CI / CD 의 단계를 잘 설명되어 있는 그림입니다. 

 

각 단계에 대한 자세한 내용은 여기를 참조해 주세요.

 

https://www.saviantconsulting.com/blog/difference-between-continuous-integration-continuous-delivery-and-continuous-deployment.aspx

 

Overview

앞으로 살펴볼 내용은 Continuous Delivery 범위까지만 살펴보지만

Continuous Deployment 도 쉽게 구축할 수 있습니다.

 

 

CI / CD 를 구축하는데 정답이 있는 것은 아닙니다. 

지금 상황에서 잘 맞는 것을 사용하면 됩니다. 👏

 

예를 들면 Travis CI 를 Jenkins 로 대체할 수 있습니다. 

Xcode Server, Jenkins, Travis and fastlane 장단점을 잘 정리되어 있는 곳은 여기에서 확인할 수 있습니다.

 

1. Push

소스 저장소(Github) 에 Push 합니다. 

 

2. Hook

소스코드가 Push 되면 Github 는 Travis 에게 Push 되었다는 것을 알려줄 책임이 있습니다. 

 

Github Project 를 Travis 와 통합하기 Integrate your GitHub project with Travis-ci

Travis CI Using Regular Expressions Hooking 될 Branch를 지정할 수 있도록 지원합니다. 

이 예제에서는 master branch에 대해서만 Hooking이 동작하도록 지정할 것입니다.

 

3. Debug Build, Test, Release Build 

Travis CI 는 "Matrix", "Build Stages" 을 통하여 병렬로 실행될 수있는 작업 그룹을 지정할 수 있습니다.

 

 

 Xcode 에서는 Build Configuration 를 File 로 구성할 수 있도록 지원하고 있습니다. 

이 예제에서는 Build Configuration를 구성하며 xcconfig 를 사용합니다. 

xcconfig 에 자세한 내용은 여기를 참조해주세요.

 

4. Integrate codecov

Test coverage 를 측정하기 위해서 codecov 를 사용합니다.

codecov 에 대해 자세한 내용은 앞으로 포스트에서 다룰 예정입니다.

 

 

5. Build Notify 

Build, Test 결과를 Channel (email, slack) 을 통해 통지받을 수 있습니다. 

통지받는 대상은 [개발자] 그룹으로 분류할 예정입니다.

6. Delivery

Fastlane 을 활용하면 좀 더 쉽게 Fabric Beta, Testflight, App store에 배포할 수 있습니다. 

Fastlane 에 대해선 앞으로 포스트에서 자세히 다루겠습니다.

 

App store 에 배포하게 되면 실제 사용자들이 앱 업데이트를 수행할 수 있습니다. 즉, Continuous Deployment 범위까지 확대됩니다.

✅Travis CI Cron-Jobs 은 주기적으로 빌드 스크립트를 실행할 수 있도록 지원합니다.

Agile 스크럼의 Iteration 주기가 2주라면 Cron jobs 를 2주 주기로 설정하고 App store 에 배포할 수 있습니다.

 

7. Delivery Notify 

배포 결과를 Channel (email, slack) 을 통해 통지받을 수 있습니다. 

통지받는 대상은 [개발자, QA, 그 외 관련된 부서] 그룹으로 분류할 예정입니다.

8. Git tag

Git tag 를 기록하는 것을 마지막으로 모든 빌드 과정이 마무리됩니다. 

 

Appendix

Github Readme 에 현재 Build 상태를 Badge로 표시할 수 있습니다. 

 

마무리 

위 과정은 정말 많은 학습비용이 들어갑니다.

굳이 필요하지 않다면 수작업으로 Build 과정을 하는 것이 옳은 방향일 수도 있습니다. 

우리는 상황에 따라 유연하게 대처할 수 있는 능력이 필요합니다!

 

부족한 부분이 있다면 댓글을 달아주세요!

우리는 이렇게 하고있다! 라는 다양한 의견도 댓글을 달아주세요!

 

참고:

https://docs.travis-ci.com/user/cron-jobs/

https://docs.travis-ci.com/user/job-lifecycle/

http://thebugcode.github.io/ios-continous-integration-choosing-a-build-server-and-tooling/

https://developer.apple.com/library/archive/technotes/tn2339/_index.html

https://medium.com/xcblog/xcodebuild-deploy-ios-app-from-command-line-c6defff0d8b8

https://www.appcoda.com/xcconfig-guide/

https://www.saviantconsulting.com/blog/difference-between-continuous-integration-continuous-delivery-and-continuous-deployment.aspx