Skip to content

Conversation

@youz2me
Copy link
Member

@youz2me youz2me commented Mar 7, 2025

👻 PULL REQUEST

📄 작업 내용

  • Github Actions을 이용해 main 브랜치로 push 트리거가 발생했을 때 자동으로 Build, Archive, Export 및 TestFlight 배포를 수행하도록 세팅했어요.

💻 주요 코드 설명

Github Actions Workflow 설정 (main.yml)

  • main.yml 파일에서는 Github Actions가 어떤 조건에서 무엇을 수행해야 하는지 정의합니다.
name: Archive and Upload TestFlight
on:
  push:
    branches: [ main ]
  • 현재 컨벤션 상 브랜치가 main, develop, feature로 분기되어 있어 릴리즈(또는 QA) 시 main 브랜치로 push를 진행하게 되면 자동으로 워크플로가 실행되도록 설정했습니다.
env:
    XC_WORKSPACE: ${{ 'Wable-iOS.xcodeproj' }}
    XC_SCHEME: ${{ 'Wable-iOS' }}
    XC_ARCHIVE: ${{ 'Wable-iOS.xcarchive' }}
    KEYCHAIN: ${{ 'test.keychain' }}
    # ... 생략된 수많은 환경 변수들
  • 파일에서 사용되는 환경 변수들을 정의했습니다.
  • .gitignore로 인해 actions가 인식할 수 없는 configgoogleservice-info의 경우 원격 레포에 Repository Secret을 등록해 환경 변수로 사용했습니다.
    • secrets.DEVELOPMENT_XCCONFIG 처럼 사용합니다.
    • Repository Secret에 등록할 때는 base64 인코딩 후 등록했습니다.
    • 이후 Create Config file과 Create GoogleService-Info.plist 스텝에서 해당 값들을 디코딩한 후 가상 머신 내에 파일을 자체적으로 만들어 사용합니다.

대략적인 흐름 설명

graph TD
    A[코드 체크아웃] --> B[키체인 설정]
    B --> C[설정 파일 생성]
    C --> D[GoogleService-Info.plist 생성]
    D --> E[코드 서명 설정]
    E --> F[버전 업데이트]
    F --> G[빌드]
    G --> H[아카이브]
    H --> I[Export]
    I --> J[TestFlight 업로드]
    J --> K[Slack 알림]
Loading
  • 워크플로는 위와 같은 흐름으로 동작하며, 업로드까지의 과정 중 하나라도 실패할 경우 SlackFailure 알림을 전달합니다.
    • 모든 과정이 연쇄적으로 일어나기 때문에 선행 흐름에서 오류가 발생할 경우 슬랙 알림을 제외한 후행 흐름은 실행되지 않습니다.
  • 자세한 흐름은 아래와 같습니다.
    1. 코드 체크아웃과 키체인 설정 스텝에서는 push가 발생한 시각의 main 브랜치의 코드를 가져오고 앱 배포를 위한 키체인을 생성하고 설정합니다.
    2. 환경별(Development/Appstore Distribution) xcconfig 파일을 생성하고 GitHub Secrets에 저장된 값을 base64 형식으로 디코딩해 파일로 저장합니다.
    3. 암호화된 파일을 복호화하고 키체인에 인증서를 세팅합니다.
    4. ios-bump-version을 이용해 앱의 빌드 정보를 자동으로 올립니다. (원래 1이었을 경우 2로 배포)
    5. Build, Archive, Export, TestFlight 업로드 로직을 차례대로 수행합니다.
    6. 배포 여부를 Slack 채널에 안내합니다.

📚 참고자료

[CI/CD] Github Actions 를 이용한 TestFlight 업로드 자동화
[CI/CD] GitHub Actions로 TestFlight 배포 자동화하기
펫프렌즈 iOS 플랫폼의 Github Actions & SPM 도입하기

👀 기타 더 이야기해볼 점

  • 끈기있는 자가 CICD를 얻는다
  • 현재 레포지토리에 올라가 있는 p12, mobileprovision 파일은 모두 암호화되어 올라가 있는 상태입니다. 보안에는 문제 없습니다!

🔗 연결된 이슈

youz2me added 30 commits March 7, 2025 02:31
@youz2me youz2me added ⚙️ setting 프로젝트 관련 설정 변경 시 사용 🦉 유진 🛌🛌🛌🛌🛌🛌🛌🛌🛌🛌 labels Mar 7, 2025
@youz2me youz2me requested a review from JinUng41 March 7, 2025 14:55
@youz2me youz2me self-assigned this Mar 7, 2025
@youz2me youz2me linked an issue Mar 7, 2025 that may be closed by this pull request
1 task
@youz2me youz2me added this to the 리팩토링 마감 milestone Mar 7, 2025
@youz2me youz2me moved this to Ready for Review in Wable-iOS Mar 7, 2025
@youz2me youz2me removed this from Wable-iOS Mar 7, 2025
Copy link
Collaborator

@JinUng41 JinUng41 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

짜장면한테 이유진 음악을 들려 줬더니 짜장면이 저절로 비벼졌습니다.

정말 끝까지 물고 늘어지는 모습에 제가 감동을 받았습니다.
감사합니다!

@youz2me youz2me merged commit 0c6453f into develop Mar 8, 2025
@youz2me youz2me deleted the setting#116-github-action branch March 8, 2025 13:37
youz2me added a commit that referenced this pull request Oct 26, 2025
[Setting] TestFlight 배포 자동화를 위한 Github Actions 도입
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⚙️ setting 프로젝트 관련 설정 변경 시 사용 🦉 유진 🛌🛌🛌🛌🛌🛌🛌🛌🛌🛌

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Setting] CI/CD를 위한 Github Action 세팅하기

3 participants