본문 바로가기

iOS

fastlane을 통한 CI/CD 자동화

1. CI / CD?

 

CI 는 Continuous Integration의 약자로 말 그대로 코드의 변경 사항들이 테스트 혹은 빌드 되어 레포에 지속적으로 통합되는 것을 의미한다.

CD 는 Continuous Delivery로 CI가 끝난 시점에서 구축된 어플리케이션을 지속적으로 제공하는 것을 의미한다.

 

CI/CD 파이프라인은 Code - Build - Test - Release - Deploy 로 구성이 되는데, 이 글에선 Test Release Deploy의 과정을 담아보도록 하겠다.

 

드림코딩에서 위 내용을 조금 더 세세하게 정리해놨으니 체크하면 좋을 것 같다.

 

2. Fastlane

 

이를 관리하는 여러가지 툴이 있는데, 이번에 출시하기로 하는 앱은 fastlane을 써보기로 했다. fastlane 프로그래밍 언어인 루비를 사용하여 터미널에서 명령을 실행해서 작업들을 자동화할 수 있다.

 

 

위의 그림과 같이 인스톨하여 프로젝트 디렉토리에 init을 해주면, fastfile 과 appfile 두가지의 파일이 생긴다.

fastfile에는 다음과 같은 코드가 적혀있다.

 

 

굉장히 함수처럼 생긴 녀석이 이렇게 딱 있다. "Description of what the lane does"라는 아주 안전해보이는 디스크립션을 읽어보니 터미널에 입력하지 않고는 못 베기겠다. 입력해보자.

 

 

그러면 몇번째 레인을 선택할 것인지 묻고, 각각의 레인의 이름과 각 레인이 수행하는 작업에 대한 디스크립션을 보여준다. 즉 fastfile 안에 있는 저 코드는 예시코드이고 함수 ios 라는 함수 안에 함수가 있는 형태로 정의된 것을 알 수 있었다.

 

그럼 이번 앱의 배포까지 프로젝트에서 사용한 lane들을 소개하도록 하겠다.(주관적인 의견이지만, 이정도만 알아도 정말 유용할 것 같다)

 

 

3. Test

 

 

test를 위한 lane을 설정하는 것은 간단하다. 앱의 scheme만 지정해주고 그대로 커맨드를 입력해주면...

 

진짜 깜짝 놀랐당.... 하지만 성공...!

 

갑자기 제멋대로 시뮬레이터들이 켜지더니 막 제멋대로 테스트를 시작한다. 하지만 전혀 문제없는 과정이고 알아서 시뮬레이터에서 테스트를 진행해주고 우측의 이미지 같이 결과를 보여준다.

 

 

4. Release

 

4.1 -  cert

fastlane을 통해 애플 개발자 계정에 로그인을 요청받은 터미널 스크린샷

 

certificate 생성 - 배포 인증서를 만드는 과정은 앱을 출시해 본 사람이라면 모두 알 것인데, 이것을 fastlane에서 수행할 수 있다.

개인적으로 앱을 배포해 본 경험이 이번이 세 번째인데(fastlane을 이용하는 것은 처음) certificate을 처음 설정하고 생성해서 그 파일을 다운로드 받고 보관하는 것이 처음이라면 어렵고 복잡하기도 하고 처음이 아니라도 귀찮을 수 있다. 근데 정말 신세계...!

 

이와 같은 커맨드들은 https://docs.fastlane.tools/actions/ 에서 모두 확인할 수  있고, 지금부터 우리는 ipa파일을 appstoreconnect에 보내주는 작업을 할 것이다.

 

4.2 - gym

먼저 gym 안에서 ipa파일을 만들어주도록 하자.

 

 

4.2.1 - project

 프로젝트의 이름을 적어준다.

 

4.2.2 - scheme

 

 

scheme을 적어넣기 전에 밑에 Shared가 잘 체크 되어 있는 지 확인해야한다. 

 

4.2.3 - export_xargs

 

 

fastlane은 프로비저닝 파일이 automatic이 아니라고 가정을 하지만, 현재 나의 프로젝트는 프로비저닝을 자동으로 관리중이다. 따라서 패스트레인에게 이것을 사용하면 된다고 지정을 해야한다.

 

export_xcargs: "-allowProvisioningUpdates"

 

이는 자동 signing을 사용해도 된다고 알리는 것이다.

 

4.2.4 - output_name:
export될 output의 이름을 정하는 것이다. 주의사항은 꼭 마지막에 ".ipa"를 붙여줘야한다.

 

 

위와같은 형태의 함수를 다시 한 번 확인해주고, (끝까지 함수의 형태에 신경을 써 주는 것이 좋다)

 

 

성공적으로 ipa파일을 만들었고, 이는 프로젝트 디렉토리에서 바로 확인할 수 있다.

 

5. Deploy

https://docs.fastlane.tools/actions/deliver/

 

이제 appstoreconnect로 이 ipa파일을 보낼 것이다. 그 전에 appleid.apple.com에서 fastlane의 app specific password를 생성하고 그것을 appfile에 환경변수로 추가해줘야한다.

 

환경변수로 추가하는 법은 appfile의 맨 위에 appleid를 환경변수로 추가하는 그대로 변수명과 값에 대입해주면 된다!

 

그리고 deliver 커맨드를 입력해주면 :

 

Good to go :)

 

최종적으로 전송이 완료되었다! appstoreconnect에서도 바로 확인이 가능했으며 이제 몇가지 세부사항들만 입력해주면 바로 앱이 심사단계에 들어갈 수 있다!

 

이렇게 fastlane을 이용해 iOS앱의 버전컨트롤(생략), 테스트, 릴리즈, 배포까지 전 과정을 자동화 하여 커맨드로 진행해보았다.

 

느낀점: 자동화가 정말 세밀한 부분까지 가능하다는 점이 정말 놀라웠다. 전에 수동으로 배포한 경험이 두 번 있기 때문에 프로비저닝, 인증서 관리를 위한 모든 툴이 있었고, 그냥 번들만 생성해주면 자동으로 배포의 모든 준비를 맞춰주는 것에 충격을 받았다...! 그리고 무엇보다도 커맨드들이 너무 직관적이고 공식문서만 봐도 누구나 할 수 있을 정도의 아주 진입장벽이 낮은 설정법을 가지고 있어서 아주 편리하게 이용할 수 있을 것 같다!!!