[Flutter] CI/CD 문서 읽어보기

김영진·2022년 4월 6일
1

Flutter 앱 개발 일기

목록 보기
26/31
post-custom-banner

목적

CI/CD 문서화

내용

CI/CD 옵션

  1. Flutter 기능이 내장된 올인원 옵션
  • Codemagic
  • Bitrise
  • Appcircle
  1. 기존 워크플로우와 fastlane 통합 : 아래의 툴을 사용하여 fastlane을 사용할 수 있다.

이 가이드는 어떻게 fastlane을 설정하는지, 그리고나서 너의 기존 테스팅과 CI 워크플로우를 통합하는 방법을 보여준다. 더많은 정보를 보려면 “Integrating fastlane with existing workflow” 이걸 보라고 한다.

fastlane

fastlane은 앱의 릴리즈 및 배포 자동화를 위한 오픈소스 도구 모음이다.

Local Setup

클라우드 기반 시스템에 마이그래이션 하기 전에 로컬환경에서 빌드, 배포 테스트 할것을 권장한다. 너는 또한 로컬 환경으로부터 CD를 위한 플랫폼을 선택할 수 있다.

  1. fastlane 설치해라.
    gem install fastlane or brew install fastlane 더 많은 정보를 보려면 공식문서로 가세요~

  2. FLUTTER_ROOT로 네이밍된 환경변수를 만들어라. 그리고 너의 플러터 SDK루트 디렉터리에 설정해라. (이것은 필수다. ios 배포를 위한 스크립트 때문에)

  3. 플러터 프로젝트를 만들고 너의 프로젝트를 빌드할 준비가 되면
    안드 : flutter build appbundle
    ios : flutter build ios --release --no-codesign

  4. 각각의 플랫폼을 위한 fastlane 프로젝트를 설정해라.
    안드: [project]/android 디렉터리에서, fastlane init을 실행해라.
    ios : [project]/ios 디렉터리에서, fastlane init을 실행해라.

  5. Appfiles를 수정해라. 너의 앱을 위한 적당한 메타데이터를 가지는것을 보장해라
    안드: [project]/android/fastlane/Appfile안에 있는 패키지 이름이 AndroidManifest.xml 안의 패키지명과 일치하는지 확인해라
    ios: [Project]/ios/fastlane/Appfile안의 app_identifier가 Inpo.plist의 번들 식별자와 동일한지 확인해라. apple_id, itc_team_id, team_id 를 채워라 너의 각각의 계정 정보로

  6. 플레이스토어, 앱스토어를 위한 로컬 로그인 자격증명을 설정해라
    안드 : Supply setup 을 진행하고, fastlane supply init을 하여 보장해라. 성공적으로 데이터가 너의 플레이 스토어 콘솔에 동기화 되는것을. .json파일은 너의 패스워드처럼 안전하게 취급하고, 공용 소스 제어 레포지토리에 체크인(넣지마세요인듯)하지마세요.
    ios : 너의 iTunes Connect 유저명은 이미 너의 Appfile의 apple_id필드에 있다. FASTLANE_PASSWORD 쉘 환경 변수를 너의 iTunes Connect 비밀번호로 설정해라. 그렇게 하지 않으면, 너는 iTunes/TestFlight 에 업로드할때 메시지가 표시될것이다.

  7. 코드 사이닝을 설정해라
    안드 : Android app signing steps.
    ios : ios에서, Test Flight 또는 App Store를 사용하여 테스트 및 배포할 준비가 되면, 개발 인증서 대신 배포 인증서를 사용하여 생성 및 서명할 수 있습니다.

    • 너의 Apple Developer Account console 에서 배포 인증서를 다운로드하고 만들어라
    • [project]/ios/Runner.xcworkspace/를 열고, 목표의 설정창에 있는 배포 인증서를 선택해라
  8. 각각의 플랫폼을 위한 Fastfile 스크립트를 만들어라
    안드 : fastlane Android beta deployment guide를 따라해라. 너의 수정은 upload_to_play_store를 호출하는 lane을 추가하는것 만큼 간단할 수 있다.(그냥 간단하게 할수있다는말인듯)
    ios: fastlane iOS beta deployment guide.를 따라해라. 너의 수정은 build_ios_app, export_method: 'app-store', upload_to_testflight를 호출하는것 만큼 쉽다. ios에서 추가 빌드는 필수적이다. flutter build 는 릴리즈를 위해 .ipas를 아카이브 하는 대신 .app을 빌드하기 때문에

이제 로컬에서 배포하면 배포 프로세스를 CI로 마이그래이션 할 수 있습니다.

로컬 환경에서 배포 실행하기

  1. 릴리즈 모드 앱을 빌드해라
  • 안드 : flutter build appbundle
  • ios : flutter build ios --release --no-codesign 사이닝 할 필요가 없다. fastlane이 아카이빙 할때 사이닝 할거라서
  1. 각각의 플랫폼에서 Fastfile 스크립트를 실행해라
  • 안드 : cd android 하고나서 fastlane [lane name]
  • ios : cd ios 하고나서 fastlane [lane name]

클라우드 빌드와 배포 설정

먼저, Travis와 같은 클라우드 시스템에 마이그래이션 하기 전에 'Local setup'에 설명된 로컬 설정 색션에 따라 프로세스가 작동하는지 확인하십시오.

고려할만한 주요한 것은 클라우드 인스턴스는 신뢰할수 없기 때문에, 너는 너의 인증서들(플레이스토어 서비스 계정 JSON 또는 너의 아이튠즈 배포 자격증)을 서버에 남겨서는 안된다

CI 시스템들은 일반적으로 스토어 개인 데이터를 위한 암호화된 환경 변수를 지원한다. 너는 이러한 환경 변수들을 전달할수있다. dart-define MY_VAR=MY_VALUE 를 사용하여, 어플이 빌드되는 동안

이러한 변수 값들을 너의 테스트 스크립트 콘솔에 다시 반영하지 않도록 주의하세요!!! 이러한 변수들은 또한 pull request 에서 이용할수 없다. merged 되기 전까지, 악의적인 유저들은 만들 수 없다 pull request가 이러한 비밀정보들이 출력되도록 할 수 없다. 조심해라 이러한 비밀정보들과 pull requests 수락하여 상호작용하는것을

  1. 로그인 인증서를 임시로 만들어라
  • 안드 : json_key_file필드를 Appfile로부터 제거하고 저장해라 너의 CI 시스템의 암호호된 변수안의 Json 스트링을.
    읽어라 환경변수를 직접적으로 너의 Fastfile안에 있는
upload_to_play_store(
  ...
  json_key_data: ENV['<variable name>']
)
  • upload key를 (ex.base64)를 사용하여 직렬화하고 암호화된 환경변수로 그것을 저장해라. 너는 역 질렬화 할 수 있다. 너의 CI 시스템에서, 다음의 설치 단계동안
  • ios : 로컬 환경변수 FASTLANE_PASSWORD을 암호화된 환경 변수를 사용하기 위해서 옮겨라 CI 시스템에,
  • CI 시스템은 너의 배포 인증서에 접근할 필요성이 있다. fastlane의 매치 시스템은 권장된다 너의 여러 기기에 걸친 인증서를 동기화 할것을
  1. Gemfile을 사용할것이 권장된다.로컬 머신과 클라우드 머신간의 fastlane 종속성이 안정적이고 재현 가능한지 확인하기 위해서 CI 시스템에서 매번 비결정적인 gem install fastlane을 사용하는 것 대신 (선택사항)
  • 너의 [project]/android 와 [project]/ios 폴더 안에서 다음의 내용을 포함하는 Gemfile 만들어라
  source "https://rubygems.org"

  gem "fastlane"
  • 두 디렉터리에서 bundle update와 소스 제어에 사용되는 Gemfile, Gemfile.lock을 확인하고
  • 로컬환경으로 실행될때 사용해라 bundle exec fastlane을 너의 루트 레포지토리 안에서.
  1. CI test script를 만들어라. travis.yml 또는 .cirrus.yml 과 같은, 너의 루트 레포지토리에
  • 구체적인 CI 설정을 위해 fastlane CI documentation 을 확인해라.
  • 너의 스크립트를 실행시키기 위해서 리눅스, 맥환경에서, 스크립트를 공유하세요
  • CI를 설정하는동안, 다음의 작업을 수행하세요
    • Ensure Builder 가 gem install builder를 사용할 수 있는지 확인
    • bundle install을 [project]/android or [project]/ios 안에서 실행해라
    • Flutter SDK가 이용 가능하도록 PATH에 설정해라
    • 안드로이드에서, 안드로이드 SDK를 이용가능하도록 해라, ANDROID_SDK_ROOT 를 설정해서
    • IOS에서 XCode에 대한 종속성을 지정해야 할 수 있다.(ex. osx_image: xcode9.2)
  • CI 업무의 다음단계
    • flutter build appbundle or flutter build ios --release --no-codesign 을 실행해라, 플랫폼에 의존하는
    • cd android cd ios
    • bundle exec fastlane [name of the lane]

결론

CI/CD 옵션중에는 플러터 기능이 내장된 올인원 옵션, 이미 존재하는 워크플로우와 fastlane을 통합하는 옵션이 있다.
fastlane은 local setup, running deployment locally, cloud build and deploy setup의 과정을 해야한다.

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp
post-custom-banner

0개의 댓글