1. iOS CI/CD 툴 선택 기준
1) Github와 연동되는가
2) Slack을 통해 팀에게 알릴 수 있는 Webhook 기능을 제공하는가
3) Test를 진행할 수 있는 환경인가
4) 소요되는 비용
2. iOS CI/CD Tools 특징
보통 Xcode cloud, Github Actions, Fastlane, Bitrise를 사용하는 것으로 보인다.
여기서 어떤 툴을 사용해야할지 선택해야하니 .. 다른 분들의 적용기들을 참고해서 대략적인 특징을 정리해보았다.
1) Github Actions
현재 회사 개발팀에서 활용하고 있는 배포 자동화 툴이다.
장점
- Github 자동화툴인만큼, Github와 호환성이 좋으며 내부에서 심플하게 자동화 workflow 구축 가능하다는 점이 장점
- Github에서 다양한 Template 제공하기 때문에 다양하게 커스텀 가능
- 많은 클라우드 모니터링 서비스 등의 인프라와의 Integration을 다양하게 지원한다는 점
- Slack Webhook 지원
단점
- 스크립트로 인한 설정에 대한 초기 러팅커브가 존재함
2) Xcode cloud
https://developer.apple.com/kr/xcode-cloud/
Apple이 공식적으로 제공하는 Xcode 내장 CI/CD 서비스
장점
- GUI 환경으로 환경을 구축할 수 있기에 스크립트를 공부하지 않아도 된다는 장점 + 초기 도입 리소스가 적게 들어감
- iOS 개발자 계정에 가입되어있는 팀은 월 25시간까지 무료 제공
- Slack Webhook 지원
단점
- 출시한지 얼마 안되어서 다른 서드파티보다는 커스텀이 어렵고, 다른 툴에 비해 단순히 브랜치의 특정 내용 변화가 생겼을 때 Action이 돈다든지 등 의 간단한 기능만을 제공한다는 점?
=> 그러나 이부분은 현재 회사에서 수립된 Git-flow가 복잡하지 않고, 테스트 환경이 매우 체계적이지는 않은 단계라서 단점으로 다가오지는 않았다.
3) Fastlane
장점
- 다양한 플러그인을 지원하고, 적용 사례나 자료도 많아서 다양한 응용 가능
- Slack Webhook 지원
단점
- 스크립트로 인한 설정 -> 초기 러닝커브가 존재함
4) Bitrise
장점
- 직관적인 GUI를 통해 배포 자동화 구축 가능 -> 스크립트를 작성할 필요 없이 설정 가능하다
- Slack Webhook 지원
단점
- 팀 플랜은 유료임
- Fastlane에 비해 플러그인들이 한정적이어서 Github Action, Fastlane 만큼 다양한 응용은 어려울 수 있다?
3. Xcode cloud 선택 이유
위 사항들을 종합해보았을때, Xcode cloud를 통해 iOS CI/CD를 시작해보자는 생각이 들었다.
1) CI/CD를 처음 시작하는 입장에서, 낮은 진입장벽
2) 2024년 3월 기준으로 25시간까지 무료다! (iOS 앱 1개이기도 하고 배포를 엄청나게 하지는 않으므로 충분하다고 생각되었음)
3) 회사에서 브랜치 전략은 Git-flow를 사용하고 있고, 테스트 과정이 복잡하지 않아서 배포를 앞둔 특정 시점에 "빌드 오류가 없는지, 빌드 오류가 없다면 TestFlight에 자동으로 업로드하여 이를 슬랙 웹훅으로써 팀원에게 알릴 수 있는지" 가장 주요한 목적이었기에 이부분을 충분히 충족시켜준다고 생각했다.
4. Xcode cloud를 통한 CI/CD 환경 구축
1) Integrate > Create Workflow 클릭
그러면 Workflow를 구성할 프로젝트를 선택할 창이 뜰텐데, CI/CD 환경을 구축할 프로젝트를 선택하면 된다.
2) 그러면 하단과 같은 Workflow 설정 창이 뜨는데, workflow 이름과 설명 / git 저장소 / 프로젝트를 설정하면 된다.
3) Environment는 빌드하는 환경을 설정하는 것으로, 나는 여기서 따로 뭘 더 건들이지는 않았다.
4) Start Conditions에서는, 말그대로 Action이 돌 Start 조건을 선택할 수 있게 되어있다. 나는 main에 PR 머지한 다음에 로컬 테스트 후, Git tag를 걸어 빌드 및 배포하고 있기 때문에 Tag Changes를 선택했다.
공식문서에 설명이 잘 되어있어서 해당 문서를 참고하면 좋다.
https://developer.apple.com/documentation/xcode/configuring-start-conditions/
5) Actions는 위에서 설정한 Start Condition일 때 실행할 Action을 정의하는 곳으로, Build / Test / Analyze / Archive 기능을 모두 제공한다.
Analyze 기능이 뭘까 알아보니 메모리 누수 혹은 다른 이슈는 없는지, 앱의 성능을 분석하는 기능을 제공한다.
https://developer.apple.com/documentation/xcode/configuring-your-xcode-cloud-workflow-s-actions
나는 우선 찍먹이니까 Build / Archive 기능만 세팅해두고, 이후 테스트 환경이 마련되면 Test / Analyze Action도 추가하려고 한다.
6) Post-Actions는 Action이 정상적으로 돌고 난 이후에 할 이후 액션에 대해 정의하는 곳이다. Notify에서는 Slack 연동이 가능하다.
그 후 Save를 누르면 간단하게 workflow 설정이 완료된다.
이후 워크플로를 편집하려면 AppStoreConnect에서 하거나 혹은 Xcode의 맨 오른쪽 아이콘, Integrate 탭에서 관리할 수 있다.
5. Xcode cloud Builde 결과를 슬랙 웹훅으로 받아보기
6. 느낀점
- 여태 배포하려면 Archiving 하는 과정에서 블락되어 시간이 많이 소요되는 상황이었는데, workflow만 잘 설계하면 트리거가 작동된 이후에 나는 해야할 일을 마저 하고있고, 액션이 저절로 돌아가서 생산성이 향상됨을 느낄 수 있었다.
- Xcode Cloud가 GUI로 기본적으로 필요한 기능들은 다 세팅할 수 있어서 CI/CD 입문하기에는 가장 좋은 툴같다.
Reference
https://artieee.tistory.com/57#google_vignette
https://medium.com/@ajayrbhanushali/empowering-mobile-development-fastlane-vs-bitrise-9e31b0d9486d
https://developer.apple.com/documentation/xcode/configuring-start-conditions/
'🍎 iOS > iOS 심화 & 응용' 카테고리의 다른 글
[iOS/Swift] URLSession vs Alamofire (0) | 2023.07.20 |
---|---|
[iOS/Swift] FSCalendar로 캘린더 구현하기 (0) | 2022.12.15 |
[iOS/Swift] Tableview/Collectionview 페이징 (Pagination) (0) | 2022.02.06 |