iOS Continuous CI / CD 구축해보자! - Overview
이 포스팅은 "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 의 단계를 잘 설명되어 있는 그림입니다.
각 단계에 대한 자세한 내용은 여기를 참조해 주세요.
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