Fastlane (4)

HYUNGU, KANG·2022년 10월 28일
2

Fastlane

목록 보기
4/4
post-custom-banner

이 글에서는 실제 연동까지 실습을 진행하지는 않습니다.
단순히 진행에 필요한 기본 배경지식만을 설명합니다.

CI/CD 연동

Continuous Integration (지속적인 통합)

새로운 기능이나 수정사항이 적용된 코드를 기존 코드에 안전하게 병합이 가능한지 체크하는 과정을 자동화
(코드 포멧, 퀄리티, 테스트, 빌드 등에 대한 검증을 자동화 해놓고 변경된 코드에서 이슈가 발생하는지 체크)

Continuous Deployment (지속적인 배포)

지속적으로 통합된 코드에 대해서 사용자에게 바로 배포가 가능하도록 자동화

Developer -> Pull Request -> CI (test) -> Merge -> CD (build and deployment) -> User


CI/CD 는 보통 원격 환경의 컴퓨터(Virtual compute, Cloud compute, Remote instance, Remote server, Machine, Container ... whatever) 에서 실행이 되고

원격 컴퓨터에 이를 도와주는 툴(Jenkins) 등으로 Repository 와 연결 및 자동화 구성을 도와주는데
요즘은 직접 설치 및 구성할 필요 없이 GitHub Actions, CircleCI 등으로 쉽게 yaml 파일 하나만 작성해서 가능하다.


CircleCI

GitHub Repository 에 .circleci/config.yml 파일만 생성하면 쉽게 CircleCI 연동이 가능하다.
config.yml 파일 작성은 링크를 참고하자

GitHub 와 연동

Organization 에 CircleCI 앱이 연결이 안돼있으면, https://github.com/settings/connections/applications/78a2ba87f071c28e65bb 로 들어가서 Organization 을 Grant 해주자.

config 구조 살펴보기

# circleci 버전
version: 2.1 

# orbs 는 GitHub Actions 의 uses: actions/checkout@v2 와 같은 Prebuilt 된 스크립트 셋이다.
# 필요한게 있다면 설치해서 사용이 가능하다.
orbs: 
  ruby: circleci/ruby@1.6.0
  macos: circleci/macos@2

# jobs 는 하나의 작업 단위이다.
jobs:
  deploy-ios: # job 이름
    macos: # 어떤 Executor(machine) 을 사용해서 job 을 실행할것인지 정의한다.
      xcode: 14.0.1 # Executor 의 옵션을 설정, macos에 XCode 버전을 지정.
    resource_class: large # Executor 의 성능을 설정
    steps: # 실행될 명령어들을 설정
      - checkout # Repository 소스코드를 체크아웃
      - macos/switch-ruby: # ruby 버전 변경
          version: '2.7.5'
      - ruby/install-deps: # gem 디펜던시 설치
          key: gems-ios
          app-dir: ./ios
      - run: # node_modules 설치
          name: Install node_modules
          command: yarn install --frozen-lockfiles
      - run: # pods 설치
          name: Install pods
          working_directory: ios
          command: bundle exec pod install
      - run: # fastlane 환경변수 설정
          name: Expose environments
          command: |
            echo "export MATCH_PASSWORD=$FASTLANE_IOS_MATCH_PASSWORD" >> $BASH_ENV
            echo "export MATCH_GIT_URL=$FASTLANE_IOS_MATCH_GIT_URL" >> $BASH_ENV
            echo "export PILOT_USERNAME=$FASTLANE_IOS_APPLE_ID" >> $BASH_ENV
            echo "export PILOT_APPLE_ID=$FASTLANE_IOS_ITC_TEAM_ID" >> $BASH_ENV
            echo "export PILOT_DEV_PORTAL_TEAM_ID=$FASTLANE_IOS_TEAM_ID" >> $BASH_ENV
            echo "export PILOT_SKIP_WAITING_FOR_BUILD_PROCESSING=true" >> $BASH_ENV
            echo "export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=$FASTLANE_IOS_APPLE_APPLICATION_SPECIFIC_PASSWORD" >> $BASH_ENV
      - run: # fastlane 배포 실행
          name: Run fastlane
          command: yarn deploy:ios

  deploy-android: # job 이름
    docker: # 어떤 Executor(machine) 을 사용해서 job 을 실행할것인지 정의한다.
      - image: cimg/android:2022.03-node # Executor 의 옵션들을 설정, docker에 어떤 이미지를 띄울건지 설정.
    resource_class: xlarge # Executor 의 성능을 설정
    steps: # 실행될 명령어들을 설정
      - checkout # Repository 소스코드를 체크아웃
      - ruby/install: # ruby 설치
          version: '2.7.5'
      - ruby/install-deps: # gem 디펜던시 설치
          key: gems-android
          app-dir: ./android
      - run: # node_modules 설치
          name: Install node_modules
          command: yarn install --frozen-lockfiles
      - run: # google service account 파일 생성 및 fastlane 환경변수 설정
          name: Create service-account.json
          environment:
            - FILE_PATH: android/fastlane/service-account.json
          command: |
            echo "$FASTLANE_ANDROID_SERVICE_ACCOUNT" | base64 --decode >> $FILE_PATH
            echo "export GOOGLE_APPLICATION_CREDENTIALS=$CIRCLE_WORKING_DIRECTORY/$FILE_PATH" >> $BASH_ENV
            echo "export FIREBASEAPPDISTRO_APP=$FASTLANE_ANDROID_APP_ID" >> $BASH_ENV
      - run: # fastlane 배포 실행
          name: Run fastlane
          command: yarn deploy:android

# workflows 선언된 job들을 어떤 구성, 트리거로 실행할지 정의한다.
workflows:
  deploy-app: # 워크플로우 이름
    jobs: # 워크플로우에서 실행할 jobs
      - deploy-ios
      - deploy-android

Trigger

기본적으로 CircleCI 는 .circleci/config.yml 파일이 포함돼있는 브랜치에 푸시가 발생할때마다 트리거 된다.
수동 혹은 API 를 이용해서 트리거 할 수도 있다.

환경변수 설정

  • CircleCI 에서 프로젝트 오픈
  • Project settings
  • Environment variables

사용할때는 $ENV_NAME 으로 사용 가능

profile
JavaScript, TypeScript and React-Native
post-custom-banner

0개의 댓글