Skip to main content

빌드 종류에 대한 설명: 로컬에서 프로덕션까지

모든 종류의 빌드에 대해 혼란스러우신가요? 이 가이드에서는 로컬, CI, 디버그, 릴리즈 빌드부터 서명, 배포, 롤백 전략까지 모든 것을 설명합니다.

마틴 도나디우

마틴 도나디우

콘텐츠 마케터

빌드 종류에 대한 설명: 로컬에서 프로덕션까지

프로젝트를 열면 build:ios:dev, build:android:qa, build:staging, build:release, build:prod몇 가지 셸 스크립트가 보입니다. 그 다음에 alguien이 말합니다. “오늘 저녁까지 클라이언트에게 스테이징 빌드를 만들 수 있나요?” 만약 여러분이 중급 모바일 개발자라면, 이 요청은 종종 매우 모호하게 느껴집니다. 어떤 설정을 사용해야 하나요? 어떤 서명 식별자를 사용해야 하나요? 어떤 백엔드를 사용해야 하나요? 어떤 배포 경로를 사용해야 하나요?

그것은 일반적으로 빌드 유형을 평평한 목록으로 다루는 데서 오는 혼란입니다. 그것은 아니다. 그것은 워크플로입니다. 각 빌드는 사용자의 장치와 laptop 사이의 특정 문제를 해결하기 위해 존재하는 특정 지점에 있습니다.

빌드는 단순히 컴파일 된 앱만이 아닙니다. 그것은 목적, 대상 audience, 및 환경에 맞춰 조립 된 앱 버전입니다. 일부 빌드는 디버깅을 도와주기 위해 존재합니다. 일부 빌드는 QA가 안전하게 깨지도록 도와줍니다. 일부 빌드는 릴리스 엔지니어링이 신뢰할 수 있는 아티팩트를 생성할 수 있도록 도와줍니다. 일부 빌드는 제품 팀이 변경 사항을 덜 위험하게 배포할 수 있도록 도와줍니다.

local 환경 설정을 제대로 하기 전에 모든 것이 시작되기 전에 local 설정이 아직 불안정하게 느껴진다면, 먼저 Capacitor로 제대로 하세요. 빌드 복잡성이 예측 가능한 기본 도구가 있는 경우에만 합리적으로 생각할 수 있습니다.

목차

__CAPGO_KEEP_0__는 소프트웨어 빌드의 세계를 단순화합니다.

__CAPGO_KEEP_0__에서 가장 흔히 하는 실수는 빌드 이름이 모든 이야기를 담고 있다고 가정하는 것입니다. 그러나 그렇지 않습니다. staging __CAPGO_KEEP_0__는 다른 저장소에서 “스테이징 API를 향한 릴리스 맛집”을 의미할 수 있습니다. 다른 저장소에서는 “모의 결제를 포함한 디버그 가능한 QA 아티팩트”를 의미할 수 있습니다. 세 번째 저장소에서는 “개인적으로 배포되는 프로덕션에 서명된 빌드”를 의미할 수 있습니다.

이러한 이유로 팀이 엉키게 됩니다. 레이블은 빌드가 수행하는 작업을 이해하는 경우에만 유용합니다.

빌드의 유형에 대한 유용한 방법은 다음과 같습니다.

  • __CAPGO_KEEP_0__는 개발자 개인이 빠르게 움직여 줄 수 있도록 도와줍니다. __CAPGO_KEEP_0__는 팀이 공유하는 소스 오브 트루스를 생성합니다.
  • __CAPGO_KEEP_0__는 팀이 공유하는 소스 오브 트루스를 생성합니다. __CAPGO_KEEP_0__는 팀이 공유하는 소스 오브 트루스를 생성합니다.
  • Debug 및 Release 버전 앱이 컴파일되고 분석되도록 정의합니다.
  • 배포 빌드 앱이 누구에게 제공되고 어떻게 제공되는지 정의합니다.
  • 서명 빌드 플랫폼이 아티팩트를 신뢰할지 결정합니다.
  • 채널 기반 업데이트 설치 후 변경 사항이 어떻게 이동하는지 결정합니다.

이것들은 경쟁하는 범주가 아닙니다. 쌓입니다.

'스테이징 빌드'는 거의 항상 단일 것이 아닙니다. 일반적으로 맛, 환경, 서명, 배포 선택의 combination입니다.

두 팀이 모두 '베타 빌드가 필요합니다'라고 말할 수 있고, 완전히 다른 아티팩트를 의미할 수 있습니다.

이것은 모바일에서 가장 중요합니다. Native 컴파일, 비밀, 배포, 앱 스토어 트랙, 테스터 접근, 환경 구성, 롤백 모두가 일치해야 합니다. 하나의 부분이 느슨하면 릴리스 프로세스가 민감한 지식이 됩니다. 그런 다음 한 엔지니어가 휴가에 가면 nobody가 깨끗하게 배포할 수 없습니다.

이 팀은 스크립트를 더 많이 기억하지 않습니다. 그들은 빌드 유형을 품질 게이트로 정의합니다. 각 게이트는 다음과 같은 다른 종류의 위험을 낮춥니다: code이 깨진 경우, 잘못된 구성, 잘못된 서명, 잘못된 롤아웃, 또는 잘못된 복구.

빌드 스펙트럼 - 로컬 빌드 vs CI 빌드

로컬 빌드는 자신만의 버전입니다. CI 빌드는 팀이 신뢰할 수 있는 버전입니다.

그것은 명백한 소리 같지만, 많은 빌드 고통이 시작될 때 팀이 두 가지를 혼동할 때입니다. alguien이 “내 컴퓨터에서 작동한다”고 증명하면 branch가 CI에서 실패하는 것은 로컬 환경이 암시적으로 캐시된 의존성, 수동으로 편집된 파일, 또는 서명 자산이 자동화에 포함되지 않은 경우입니다.

로컬 빌드와 CI 개발에 대한 현대 사무실에서 일하는 집중된 남자.

로컬 빌드

로컬 빌드는 개인적, 빠르고 버려질 수 있습니다. 즉시 질문에 답하기 위해 사용합니다.

화면이 렌더링되나요? 네이티브 플러그인이 초기화되나요? Gradle 또는 Xcode 변경이 컴파일을 깨트리나요? 로깅을 높여서 재현할 수 있는 충돌이 있나요?

좋은 로컬 빌드는 속도보다 의식에 우선합니다. 종종 느슨한 검사, 자세한 로그, 개발자 토글, 임시 장치가 포함됩니다. 그건 괜찮습니다. 그 JOB은 빠른 feedback를 제공합니다.

그것이 작동하지 않는 것은 로컬 빌드를 더 중요한 것으로 승격하는 것입니다. 로컬 빌드는 컴파일이 성공적으로 한 컴퓨터에서만 작동하기 때문에 릴리스 아티팩트가 될 수 없습니다.

CI 빌드

CI 빌드는 느린 이유가 있습니다. 그들은 개인 컴퓨터 상태를 변수로 제거하고 빌드 프로세스를 반복 가능하게 만듭니다.

CI가 건강할 때, 그것은 세 가지 일을 잘합니다:

  • 새로부터 다시 빌드합니다: 프로젝트가 숨겨진 지역 가정 없이 컴파일 될 수 있는지 증명합니다.
  • 팀 수준의 체크를 실행합니다: 유닛 테스트, linting, 그리고 패키징 규칙은 항상 같은 장소에서 발생합니다.
  • 추적 가능한 아티팩트를 생성합니다: 팀은 빌드를 커밋, branch, 그리고 pipeline 실행과 연결할 수 있습니다.

그것이 왜 나는 워크샵-버스-공장 analogy를 좋아하는지 이유입니다. laptop은 반복을 위해 작업대입니다. CI는 실제 프로세스를 증명하는 assembly line입니다.

만약 팀이 여전히 자동화로 script를 어디서 실행할지 결정하는 것을 수동으로 결정하고 있다면, 그 논리를 중앙화하세요. 실제 참고 자료는 __CAPGO_KEEP_0__ Actions를 사용하여 개발 및 프로덕션 빌드 관리하는 이 안내서입니다. managing dev and prod builds with GitHub Actions.

protectedTokens CI에서 artifact를 개발자의 머신에서 가져오지 말고, QA, 제품, 또는 지원이 필요할 때 가져오도록 하세요.

빌드 라이프 사이클의 나머지 부분은 더 쉬워집니다. 플래버 선택, 서명, 환경 주입, 배포는 모두 팀의 누구든지 검토할 수 있는 pipe라인에 속합니다.

Core Build Flavors Debug vs Release

빌드에 사용되는 여러 레이블이 있지만, 그 이름의 뒤에 있는 두 가지 맛이 가장 중요합니다. 디버그 그리고 업데이트.

개발자와 사용자는 반대되는 것을 필요로 하기 때문에 존재한다.

__CAPGO_KEEP_0__ 빌드와 __CAPGO_KEEP_0__ 빌드 간의 성능 및 목적의 주요 차이점을 비교하는 정보그래픽입니다.

디버그 빌드

__CAPGO_KEEP_0__ debug 빌드는 인간이 동작을 검사할 수 있도록 도와줍니다. 일반적으로 더 많은 메타데이터를 유지하고, 문제를 해결하는 것을 더 쉽게 해주며, 문제를 숨기지 않는 최적화 기법을 피합니다.

건설 규격에서 유용한 비유가 있습니다. 규격은 일반적으로 다음 중 하나로 분류됩니다. prescriptive, 성능, proprietary, and reference-standard 타입 및 디버그 빌드가 정확한 도구 및 방법을 지정하는 prescriptive 접근 방식으로 매핑되며, 릴리스 빌드는 결과물에 초점을 맞춘 performance 접근 방식으로 매핑됩니다. 타입 및 디버그 빌드가 정확한 도구 및 방법을 지정하는 prescriptive 접근 방식으로 매핑되며, 릴리스 빌드는 결과물에 초점을 맞춘 performance 접근 방식으로 매핑됩니다. 실제로, 디버그 빌드는 다음의 건축 사양 유형 분해에서 설명된 것과 같이 다음을 포함합니다: 성능 proprietary , and.

reference-standard

  • 읽기 가능한 디버그 정보: 스택 추적, 콘솔 출력 및 Symbol을 통해 오류를 찾는 데 도움이 되는 정보.
  • 개발자 편의성: 엔드 유저에게 적합하지 않은 mock 토글, 테스트 메뉴 및 기능 Switch.
  • 저항이 적은 반복: 빠른 설치 및 실행 주기보다 패키지가 정제된 것보다 더 중요합니다.

디버그 빌드는 "나쁜" 빌드가 아닙니다. 목적을 위해 만들어졌습니다.

릴리즈 빌드

릴리즈 빌드는 실제 장치에 배포된 빌드입니다. 이것은 우선순위를 즉시 변경합니다.

이제 패키지完整성, 시작 동작, 보안 태세, 작은 페이로드, 예측 가능한 런타임 특성에 관심이 있습니다. 또한 검사 또는 부실로 사용되는 불필요한 진입점이 적게되기를 원합니다.

이것은 단순한 트레이드 오프입니다. 디버그 빌드가 더 쉽게 검사되도록 하는 모든 것이 릴리즈 빌드가 프로덕션에 적합하지 않도록 만드는 경계입니다.

팀과 함께 사용하는 결정 경계입니다.

개발에 가장 적합한 환경 최적화하는 부분
Debug 개발, 로컬 테스트, 문제 재현 속도와 반복 속도
릴리즈 베타 배포, 스토어 제출, 프로덕션 론칭 안정성, 성능, 신뢰

팀이 여전히 잘못하는 이유

혼동의 가장 큰 원인은 '환경'과 '맛'을 혼용하는 것입니다.

빌드가 __CAPGO_KEEP_0__production-like 환경을 위해 비프로덕션 데이터를 사용하는 것이 QA에서 일반적입니다. 개발을 위한 일상적인 코딩을 위해 개발 서비스를 향한 디버그 맛을 사용합니다. 팀이 패키지 이름에 모든 가능한 combination을 인코딩하는 대신 매트릭스를 문서화하는 대신 스크립트 sprawl의 많은 원인이 있습니다.

release 맛을 비개발자들이 사용자 대면 동작을 테스트할 때 배포하고, debug 맛은 엔지니어링 작업과 의도적인 디버깅을 위해 유지하세요.

그 규칙이 의도하지 않은 복잡성을 많이 제거합니다.

빌드와 배포 환경을 매핑하는 방법

빌드의 유형에 대한 많은 토론이 너무 일찍 끝나게 됩니다.

빌드의 유형을 설명하는 것만으로 충분합니다.

빌드가 어디로 가는지에 대한 더 어려운 질문을 무시합니다.

A practical build workflow usually moves through several environments, each with a different audience and tolerance for risk. If you’re working on Capacitor apps, it also helps to keep a clean mental separation between 실용적인 빌드 워크플로는 여러 환경을 거쳐야 하며, 각 환경은 다른 청중과 위험에 대한 용납 범위가 다릅니다. Capacitor 앱을 개발할 때, 개발과 프로덕션 앱 동작을 구분하는 청산한 정신적 분리를 유지하는 것도 도움이 됩니다., because many “build bugs” are really environment-mapping mistakes.

__CAPGO_KEEP_0__

밤에 빌드와 카나리 빌드

이것들은 엔지니어, QA, 또는 작은 내부 그룹이 rough edges를 tolerate할 수 있는 사람들에게 제공됩니다.

밤에 빌드는 일반적으로 일정에 따라 생성되거나 최신 메인 branch 상태에서 생성됩니다. 카나리 빌드는 더 넓은 롤아웃 전에 좁은 대상에게 의도적으로 노출됩니다. 나는 그것들을 학습 도구로 다루며 안정성에 대한 약속이 아닙니다.

  • 이것들은 다음 질문에 답할 때 유용합니다:
  • branch가 모듈 간에 깨끗하게 통합되나요?
  • native dependency 업그레이드가 특정 장치 패밀리를 깨뜨렸나요?

내부 테스터가 더 넓은 베타 노출 이전에 회귀를 감지할 수 있나요?

이것들은 카나리 빌드를 사람들에게 제공할 때 예상되는 매끄러운 소프트웨어를 기대하는 사람들에게 주어서는 안 됩니다. 그러면 노이즈 피드백이 발생하고, 잘못된 대상이 일반적인 churn를 릴리즈 문제로 부르게 됩니다.

테스트 및 베타

이 시점에서 제품 품질이 엔지니어링 편의보다 더 중요합니다. 스테이징 또는 베타 빌드는 실제 사용자가 받을 것과 유사해야 합니다. 일반적으로 이는 릴리스 맛, 가능한 경우 프로덕션과 같은 구성, 플랫폼 도구인 TestFlight 또는 Google Play 테스트 트랙을 통해 제어된 배포를 의미합니다.

The audience shifts here:

  • QA는 회귀, 워크플로우 및 수락 기준을 검증합니다.
  • 제품 매니저는 실제적인 셸에서 동작을 검토합니다.
  • 외부 테스터는 사용성, 장치 지원 및 경계 사례를 검증합니다.
  • 지원 또는 성공 팀은 미래의 변경 사항을 미리 보아야 합니다.

이곳에서 발생하는 실수는 베타를 “debug 빌드만”으로 간주하는 것입니다. 만약 테스터가 실제 사용자 흐름을 평가하고 있다면, 테스터는 릴리즈와 같은 조건이 필요합니다.

개인 분배 빌드

어떤 앱은 전혀 공공 스토어 사용자에게 전달되지 않는 빌드 또는 narrower 그룹에 먼저 도달해야 하는 빌드가 필요합니다.

그것은 클라이언트에 특화된 빌드, 내부 직원 앱, 규제 워크플로우, field 운영 도구 및 기업 전용 배포를 포함합니다. 이들은 설치할 수 있는 사용자 및 백엔드에 접속할 수 있는 사용자를 엄격하게 제어해야 합니다.

이것은 이름이 위험해지는 곳입니다. 팀들은 종종 “기업 빌드”라고 말하지만 실제로는 여러 가지 다른 것을 의미합니다.

  • privately signed 내부 앱
  • 스토어에 배포된 앱에 내부 전용 접근 제어를 사용하는 앱
  • 고객 전용 브랜딩된 아티팩트
  • 주주자에 대한 검토를 위해 사전 생산 릴리즈 후보

운영 모델이 다르다. pipeline 및 이름에서 그들을 분리하세요.

생산

생산 빌드는 사용자에게 앱 스토어, 플레이 스토어, 또는 동등한 승인된 채널로 배포됩니다.

이 시점에서 빌드는 평범해야 합니다. 그게 칭찬입니다.

생산 빌드는 재현 가능해야 하며, 릴리즈 조건에서 테스트되어야 하며, 롤백 계획과 연결되어야 합니다. 마지막 순간的手수작업 편집, 기계에 특화된 HACK, 또는 "다음 빌드에서 수정할 것"의 compromis를 원하지 않습니다.

여기 있습니다.

소프트웨어 빌드 유형 및 그 특성

빌드 유형 대상 구성 배포 방법
지역 개발자 개인 개발자 일반적으로 디버깅, 빠른 반복, 로컬 환경 설정 직접 로컬 머신에서 설치
CI 검증 엔지니어링 팀 반복 가능한 자동 빌드, 공유 체크 CI 아티팩트 저장소
야간 또는 캐니 내부 테스터, 선택된 팀원 초기 통합 상태, 제한된 롤아웃 내부 배포 도구
테스트 환경 또는 베타 QA, 제품, 외부 테스터 일반적으로 릴리즈와 같은 비공개 환경 매핑 TestFlight, Play 테스트 트랙, 개인 링크
Ad-hoc 또는 기업 내부 직원, 고객, 제한된 그룹 제어된 구성, 목적지별 서명 개인 배포 채널
프로덕션 공개 사용자 최종 릴리즈 구성, 스토어 준비 서명 App Store 또는 Google Play

__CAPGO_KEEP_0__의 적절한 빌드 유형은 사용자의 위험에 대한 용납 범위와 일치해야 합니다. 대부분의 릴리스 오류는 팀이 그 정렬을 생략했을 때 발생합니다.

Code 인증의 중요 역할

모바일에서 빌드 파일 자체만으로는 의미가 없습니다. 플랫폼은 신뢰할 수 있는 출처에서 왔으며 생성 후 nobody가 변경하지 않았다는 것을 증명해야 합니다. 그 증명은 code 인증.

빌드가 완벽하게 컴파일되었지만 설치, 업로드, 또는 실행이 올바르게 작동하지 않았던 경우, 인증이 문제였을 것입니다.

Python 소스 code를 표시하는 컴퓨터 화면과 Code 인증 overlay 텍스트가 있는 Blender

__CAPGO_KEEP_0__ 인증이 실제로 증명하는 것

모바일 팀에게는 code 인증이 세 가지 일을 합니다.

  • 신뢰성: __CAPGO_KEEP_0__ 인증은 앱을 개발자 또는 조직과 연결시킵니다.
  • 완전성: __CAPGO_KEEP_0__는 서명된 항목이 서명 이후 변조되지 않았는지 증명하는 데 도움이 됩니다.
  • Authorization: Apple 플랫폼에서 특히나, 앱이 어디서 어떻게 실행될 수 있는지 제어합니다.

개발자들이 혼란스럽게 여기는 세 번째 점은 서명이 단순히 신분만을 의미하는 것이 아님을 알려줍니다. 서명은 또한 허가입니다.

code 앱은 로컬 디바이스에서 실행하거나 테스터에게 배포하거나 내부 배포하거나 스토어에 제출하는 것에 따라 서명 매체가 달라질 수 있습니다.

서명이 목적지에 따라 어떻게 변하는지

이것이 프로세스를 지속적으로 유지하는 정신 모델입니다. 서명은 배포에 따라 변합니다..

로컬 개발자 설치는 하나의 신분과 허가 집합을 사용합니다. 테스트 플라이트를 통해 전송된 베타 빌드는 다른 것을 사용합니다. 내부 배포 경로는 다시 다른 프로파일이 필요할 수 있습니다. 공개 스토어 릴리스에는 자신의 서명 기대와 검토 호환 가능한 패키징이 있습니다.

서명이 변경되면, 항목의 허가된 목적지가 함께 변경될 수 있기 때문에 '빌드를 다시 서명하라'는 거의 작은 요청이 아닙니다.

유지 관리를 위한 정제된 설정은 다음과 같습니다.

  • CI에서 서명 자산을 저장합니다. 개인 노트북이 아닌 곳에.
  • 목표별로 명확한 구분: 개발, 사내 테스트, 기업, 스토어 릴리즈.
  • 회전 및 접근 제어: 특히 계약자 또는 여러 제품 팀이 인프라를 공유할 때.
  • 감사성: 팀이 웹 업데이트를 __CAPGO_KEEP_0__ 앱 내부에 배포할 경우, 두 번째 서명层를 고려해야 하는 경우도 있습니다. 이 __CAPGO_KEEP_0__ 업데이터 __CAPGO_KEEP_1__ 서명에 대한 종단-to-종단 보안 개요는

If your team ships web updates inside a Capacitor app, there’s a second signing layer to think about as well. This overview of end-to-end security for Capacitor updater code signing 서명된 자료를 프로덕션 인프라와 같이 다루세요. 그게 실제로 무엇인지 기억하세요.

__CAPGO_KEEP_0__ 업데이터 __CAPGO_KEEP_1__ 서명에 대한 종단-to-종단 보안

__CAPGO_KEEP_0__

CI/CD와 업데이트 채널을 통해 릴리스를 조율하는 방법

팀이 성숙할 때, 문제는 빌드의 유형을 알지 못하는 것이 아니라, 그들을 인간의 추측 없이 조율하는 것입니다.

CI/CD에서 그 조율을 맡아야 합니다.

capgo.app의 스크린샷에서

pipeline은 빌드 계약입니다.

신뢰할 수 있는 pipeline은 매번 동일한 질문에 답해야 합니다.

  • 이 빌드는 무엇을 위해 존재하는가
  • 이 빌드는 어떤 버전을 사용하는가
  • 이 빌드는 어떤 환경 변수를 받는가
  • 이 빌드는 어떤 테스트를 통과해야 하는가
  • 이 빌드는 어떤 인증 정보를 사용하는가
  • 이 빌드는 어디로 배포되는가

That structure mirrors a good technical specification. A well-formed spec should include 목적과 범위, 기능 요구 사항, 설계 요구 사항, 기술 표준, 테스트 요구 사항, 배달 요구 사항 및 유지 보수 또는 유지 관리 요구 사항, 기술 사양 설명서에 로 설명된 것과 동일한 discipline이 CI/CD를 더 쉽게 이해할 수 있게 해준다. pipe line은 스크립트의 묶음이 아닌 실행 가능한 릴리즈 정책이 된다.실제로 pipe line은 엔지니어가 수동으로 실행하는 것이 아닌 pipe line이 결정해야 한다. branch 규칙, 태그, 승인 단계, 서명 컨텍스트 및 배포 대상이 모두 인코딩되어야 한다.

성공한 방법:

Branch-Driven Intent:

  • main, release branch 및 태그가 다른 워크플로우를 트리거한다. Explicit Artifact Naming:
  • 맛, 환경 및 대상이 출력에 표시된다. Promotion 대신 rebuild-by-hand:
  • __CAPGO_KEEP_0__ __CAPGO_KEEP_0__에서 유효한 artifact를 전진시키기 보다는 그들을 임의로 재생성하는 대신.

What 항상 실패하는 것은 '한 개의 유연한 스크립트' 접근 방식입니다. 그곳에서 모든 사람들이 커스텀 플래그를 전달하고, 그것들이 스토어 또는 테스터가 필요로 하는 것과 일치하는지 기대합니다.

채널은 바이너리가 배포된 후에 제어를 추가합니다.

자연어 빌드는 여전히 coarse-grained입니다. 한 번 릴리스가 스토어에 들어간 후, Capacitor 앱 내부의 웹 콘텐츠를 변경하는 것은 항상 새로운 바이너리를 다시 빌드하는 것이 필요하지 않습니다.

그것이 업데이트 채널이 유용해지는 곳입니다. 그것들은 팀이 설치된 프로덕션 바이너리 내부에서 사용자 또는 환경을 대상으로 한 채널에 signed 웹 번들을 게시하여 JavaScript, CSS, 복사본, 구성, 및 자산 변경을 푸시할 수 있도록 해줍니다. Capacitor 팀에게는 하나의 옵션은 Capgo,

실용적인 패턴은 다음과 같습니다.

  • CI/CD에서 바이너리 빌드: 자연어 앱을 생성, 서명, 및 배포합니다.
  • 채널 assignments: 사용자 또는 환경을 베타, 스테이징, 프로덕션, 또는 고객 특정 스트림으로 맵핑합니다.
  • Selective rollout: __CAPGO_KEEP_0__의 한 그룹에 웹 변경 사항을 보내기 전에 더 광범위한 노출을 기다리지 않고.
  • Rollback path: 업데이트가 잘못된 경우 스토어 리뷰를 기다리지 않고 비활성화 또는 이전 버전으로 되돌리기.

If you haven’t set up that model yet, this walkthrough on Capacitor에서 업데이트 채널을 생성하고 삭제하는 방법에 대한_walkthrough입니다. makes the mechanics concrete.

A short demo helps if you haven’t seen channels in action:

모바일 팀이 필요로 하는 전략적shift입니다. 빌드 타입은 단순히 아티팩트가 아닙니다. CI/CD는 바이너리가 생성되는 방법을 제어합니다. 채널은 설치 후 변경 사항이 노출되는 방법을 제어합니다.

Best Practices for a Modern Build Workflow

현대 빌드 워크플로에 대한最佳 Practices

A sane build system is opinionated. It doesn’t let every developer improvise release behavior.

  • 분리된 축을 명확하게 표시하십시오: 맛, 환경, 서명 대상 및 배포 대상이 하나의 모호한 레이블에 섞여 있으면 안 됩니다.
  • CI가 팀에 대면하는 아티팩트를 생성하십시오: 개발용으로만 빌드하는 것이 아니라 자산에 대한 신뢰를 얻기 위한 빌드가 아니므로 로컬 빌드는 개발용입니다.
  • 릴리즈와 같은 조건에서 테스트하십시오: QA 및 베타 테스터는 실제 앱과 가장 가까운 정도로 동작을 보게 해야 합니다.
  • 서명 자산을 노트북에서 제거하십시오: 비밀은 제어된 인프라에 narrow 접근이 있는 곳에 속해야 합니다.
  • 아티팩트를 사람으로 읽을 수 있도록 이름을 지어야 합니다: 파일이 어떤 용도로 사용되는지 몇 초 안에 식별할 수 없다면 이름이 잘못된 것입니다.
  • 프로모션보다 재생을 선호하십시오: 아티팩트가 유효화된 후에는 워크플로우를 통해 이동시키기보다 수동으로 재구축하는 대신 진행하십시오.
  • Design rollback before launch: Capacitor rollback은 느리고 운영상 부하가 심합니다. 웹-layer rollback은 Capacitor 업데이트에 대해 훨씬 빠를 수 있지만, 채널과 정책을 미리 계획해야만 합니다.

가장 큰 마음의 변화는 이것입니다: '어떤 빌드 스크립트를 실행해야 하나?' 라고 묻지 말고 '이 단계에서 나는 어떤 위험을 관리하고 있나요?' 라고 묻는 것입니다. 이 질문은 더 나은 빌드 시스템을 만듭니다.

워크플로가 그 질문에 명확하게 답한다면, 릴리스 프로세스는 더 쉽게 운영할 수 있고, 더 쉽게 감사할 수 있으며, 한 명의 주니어 엔지니어가 올바른 주문어를 기억해야 하는 것에 의존하지 않습니다.


Capacitor 앱을 배포하는 팀이 릴리스 워크플로에 대한 더 chặt한 제어가 필요하다면, Capacitor을 해당 스택의 일부로 평가하는 것이 가치가 있습니다. Capgo Capacitor 앱 내의 웹 자산에 대한 목표된 라이브 업데이트를 처리하고, 서명된 번들을 지원하며, 채널 기반 롤아웃 및 롤백 제어를 지원하여, 원시 빌드 PIPELINE을 교체하지 않고도 더 빠른 수정이 필요할 때 유용합니다.

Capacitor 앱에 대한 실시간 업데이트

웹层 버그가 활성화된 경우, 앱 스토어 승인까지 며칠 기다리지 않고 Capgo을 통해 패치를 배포하세요. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로를 유지합니다.

Get Started Now

최신 블로그 게시물

Capgo은 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.