기존에 했던 프로젝트를 하면서 원격 develop 브랜치에 머지할 때 빌드가 안되는 코드들이 들어오는 경우가 많았습니다.
매번 머지할 때 마다 빌드 체크하고, 로컬에서 원격으로 올라오지 않은 코드들 검수하는 과정이 필요했었습니다.
이것 또한 많은 시간이 들었는데요..
이번에 출시하는 앱을 만들면서 비즈니스 로직을 더 탄탄하게 만들기 위해 테스트코드를 구성하고,
빌드 체크를 매번 진행하여 안정성을 높일 수 있게 CI를 구성하기로 했습니다.
CI란?
CI란 Continuos Integration의 줄임말로 해석하면 지속적 통합입니다.
여러 개발자들이 같은 애플리케이션의 다른 기능을 동시에 작업합니다.
개발된 각각 기능들을 특정한 날짜를 지정하여 모든 코드를 병합하는 경우, 충돌 해결이나 코드 수정 등 많은 시간을 소모하게 됩니다.
그래서 이런 빈번하게 일어나는 코드 변경 사항을 병합하는데 용이하도록 자동화 프로세스를 만드는 것입니다.
성공적인 CI는 개발자가 변경 사항을 병합하면 자동으로 빌드하고, 여러 유닛테스트나 UI테스트를 실행하여 변경 사항에 대해 검증하는 것을 자동으로 진행하게 구현하는 것입니다.
Github에서 제공해주는 Actions 기능을 활용하여 CI를 구현하려고 합니다
Github Actions
https://docs.github.com/ko/actions
GitHub Actions 설명서 - GitHub Docs
GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다. CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완
docs.github.com
Github Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼입니다.
특정 이벤트가 발생할 때(PR, Push 등), 워크플로가 실행되는 구조입니다.
CI를 구성하기 위해 워크플로를 작성하고 리포지토리에 등록하면 끝입니다.
단순히 빌드 확인만 하지 않고 테스트코드를 작성하여 테스트코드도 실행되도록 구현하여 중요한 비즈니스로직들이 정상적으로 실행되는지 확인하도록 작성해보았습니다.
name: CI
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop", "release" ]
jobs:
build:
runs-on: macos-14
steps:
- name: 👻 Checkout Source Code 👻
uses: actions/checkout@v2
- name: Select Xcode version
run: sudo xcode-select -s /Applications/Xcode_16.2.app
- name: Decode GoogleService-Info.plist
run: |
echo "$GOOGLESERVICE_INFO" | base64 --decode > ./HowManySet/Resources/GoogleService-Info.plist
env:
GOOGLESERVICE_INFO: ${{ secrets.GOOGLESERVICE_INFO }}
- name: 📱 List Available Simulators
run: xcrun simctl list devices
- name: 🛠 Start xcode build
run: |
xcodebuild clean test \
-project HowManySet.xcodeproj \
-scheme HowManySet \
-destination 'platform=iOS Simulator,name=iPhone 15 Pro,OS=17.4' \
-only-testing:HowManySetTests
'iOS' 카테고리의 다른 글
Reactor Kit View를 채택하는 VC에 bind(reactor:) 메서드가 실행되지 않음 (0) | 2025.06.20 |
---|---|
왜 POP? (WWDC15) (0) | 2025.06.02 |
[트러블 슈팅] DiffableDataSource 컬렉션 뷰에 다양한 데이터모델을 사용하기 (0) | 2025.05.02 |
[트러블 슈팅] CoreData의 Entity Attribute의 타입을 변경한 경우 (0) | 2025.04.23 |
메모리 사용량 확인을 위한 vmmap (1) | 2025.03.18 |