Git

[CI] Swift Github Action 적용기

chemi_ 2022. 11. 28. 19:17

이번에 PR을 날리면 자동으로 빌드를 돌려서 develop이 박살나는지 확인해주는 CI를 적용해보았다.

 

적용해보면서 겪은 문제들과, 구글링해도 나오지 않던 바보같은 실수를 다른사람들은 하지 않았으면 하는 마음에 작성해본다.

 

 

 

우선은 특정 브랜치를 생성해서 진행한 게 아니라 develop 브랜치에서 진행했다.

 

그 이유는 develop에 들어갈 때 적용이 되는데,

 

새로 브랜치를 만들면 CI 추가 작업하고(한번에 된다는 보장이 없음. 분명 실수를 하기 때문에), develop에 PR날리고, 그 PR이 develop에 merge가 되어야 그 때부터 테스트를 할 수 있기 때문에 번거로워서 develop에서 작업했다.

 

우리팀 규칙으론 develop에서 작업은 원칙적으로 금지였지만, CI관련 작업이었고, 현재 앱 심사 제출해놓고 살짝 뜬 기간이 있어서 후딱 설정했다.

 

Github Respository에서 Action 탭에 들어간다.

 

자동으로 현재 Repository에 맞는 언어를 추천해준다.

 

난 현재 Swift로 개발중이기 때문에 Swift를 선택한다.

 

Configure 버튼을 누른다.

위와 같은 yml 파일이 뜰 것이다.

 

느낌적으로 위에서부터 훑어보면 

 

현재 프로젝트 Repository 이름 / .github / workflow / swift.yml

 

swift.yml 에서 swift는 이름을 마음대로 설정해줘도 상관없다.

 

난 Build로 이름을 지어줬다. (본인 원하는대로 하면 된다)

 

여기서의 언어는 yml 언어이기 때문에, 띄어쓰기가 매우 중요하다.

 

# This workflow will build a Swift project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift

name: Maddori.Apple Swift-Builder

on:
  push:
    branches: [ develop, main ]
  pull_request:
    branches: [ develop, release, hotfix, feature ]

jobs:
  build:

    runs-on: macos-latest

    steps:
    - name: 👻Checkout Source Code👻
      uses: actions/checkout@v2
      
    - name: MaddoriApple Build Tests
      run: |
        xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"
        xcpretty --color --simple

 

위에서 부터 보면 on이 트리거가 되는 부분인데 push와 pull_request가 생성되었을 때 작동하는 트리거이다.

 

현재 push는 develop, main 브랜치에 적용해뒀고, pr은 develop, release, hotfix, feature 브랜치에 적용해 두었다.

 

jobs 부분은 돌아가는 빌드의 내용이다.

 

runs-on은 최신 mac os 버전으로 돌린다는 의미고,

 

steps은 

 

테스트?? 가 되는 부분이다.

 

난 develop이 무사히 빌드가 되는지 확인하고 싶었다.

 

그래서 눈여겨 봐야할 코드 부분이 

 

xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"

이 부분이다.

 

난 이 부분에서 여러번 막혀서 

9번 만에 이유를 깨닫고 성공했다..

 

CI를 적용하는 다른 블로그를 보면 

 

예시1)

run: | 
  xcodebuild clean test -project example.xcodeproj -scheme example -destination "platform=iOS Simulator,name=iPhone 11"

 

예시2)

xcodebuild clean test -project example/example.xcodeproj -scheme example -destination 'platform=iOS Simulator,name=iPhone 11 Pro,OS=14.4'

 

이런식으로  clean test 라고 적혀있다.

 

내가 막힌 부분

 

test 가 적히면 test코드를 만들어 줘야한다.

 

그래서 다른사람들 프로젝트를 보면

 

예시1
예시2

이렇게 테스트 코드를 작성해져있다.

 

나는 이 부분에서 계속 막혀서

 

이 에러를 계속 만났다.

 

아무리 구글링 해봐도 해당 에러를 알려주는 부분이 없었다.

 

그래서 위의 프로젝트를 직접 다운 받아보고 scheme을 보니까 각각의 scheme이 있었다.

 

(3가지의 Scheme이 있었음)

 

위의

 

run: | 
  xcodebuild clean test -project example.xcodeproj -scheme example -destination "platform=iOS Simulator,name=iPhone 11"

 

위의 test라는게 example라는 scheme의 테스트를 진행한다는 얘기였는데

 



우리의 프로젝트에는 하나밖에 없었다.

 

그래서 계속

xcodebuild: error: Scheme MaddoriApple is not currently configured for the test action.
 
 
이 에러를 만나게 되었다.
 
진짜 scheme에 .이 들어가서 안되는건가?? 해서 scheme을 develop에서 삭제도 해보고, 바꿔도 보고 별짓을 다 해봤다.... 하지만 될리가 없지..
 
 
 
 
 
그래서 여러 CI관련 구글링을 하던중
 
https://sujinnaljin.medium.com/ci-cd-github-actions-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-xcode-build-test-%EC%9E%90%EB%8F%99%ED%99%94-73b90a3dcc65
 

이런 내용을 보게 되었고, 난 테스트 코드를 만들지 않았기 때문에 이게 내 얘기구나라는걸 바로 알게되었다.

 

 

그래서 clean test 코드가 있던 부분을 없애고

 

xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"

 

build 를 추가했다. 

 

그러니 매우 잘 됐다.

 

 

 

 

내가 놓친 핵심

다른 블로그 글들을 참고는 했지만, 완벽히 똑같이 따라하지 않고 내 입맛대로 하려다보니 문제가 발생했다.

 

처음 적용해보는 문제였기 때문에, 왜 안되는지 이유를 찾기가 어려웠다.

 

나같이 여러 블로그들 같이 보면서 적용해보는 사람이라면 충분히 겪을만한 문제인 것 같다.

 

Test코드를 만들어 뒀다면 test를 적어도 되지만, 그냥 빌드를 확인하고 싶은거라면 build로 적길 바란다.

 

 


추가적으로 실수할 수 있는 부분들

xcodebuild: error: ‘./Maddori.Apple.xcodeproj’ does not exist.

이런 에러가 뜬다면

 

 

xcodebuild build -project ./Maddori.Apple/Maddori.Apple.xcodeproj -scheme Maddori.Apple -destination "platform=iOS Simulator,name=iPhone 13,OS=latest"

이 부분을 자세히 보면 좋을 것 같다.

 

이렇게 한 번 더 들어가서 .xcodeproj를 적은 이유는 간단하다

 

요기 안에 들어가서

xcodeproj 파일이 있기 때문이다

 

한 마디로 한 뎁스가 더 있기 때문이다.

 

그래서 한 뎁스를 더 적어준다면 해결된다.

 

 

 

 

 

 

github : https://github.com/DeveloperAcademy-POSTECH/MacC-Team-Maddori.Apple