지속적인 배포란 code 변경 사항이 미리 정의된 자동화된 품질 게이트를 통과하면 즉시 프로덕션으로 보내지며 수동 릴리스 트리거가 필요하지 않다.. 현재도 조직의 45%만이 프로덕션으로 릴리스를 자동화한다, 그 이유는 자동화가 안전하게 수행할 수 있는 팀이 여전히 경쟁력을 유지하기 때문이다.
Capacitor 또는 Electron으로 빌드 중이라면 이미 느끼고 있을 것이다. 버그 픽스가 준비되었고 웹层가 패치되었으며 QA가 완료되었지만 릴리스는 여전히 사람, 회의, 또는 앱 스토어 사이클에 의존하고 있다. "준비"과 "라이브" 사이의 간격은 대부분의 배포 PIPELINE이 느려지는 곳이다.
모바일 팀에게 지속적인 배포는 단순히 백엔드 자동화가 아니다. 자동화할 수 있는 것과 여전히 플랫폼 제약이 있는 것을 분리하고, 자동화할 수 있는 것과 여전히 플랫폼 제약이 있는 것을 디자인하는 릴리스 프로세스를 설계하는 것이다. 하이브리드 앱의 경우 일반적으로 네이티브 셸과 웹 자산에 대한 릴리스 프로세스를 별도로 설계해야 한다.
목차
- 지속적인 배포란
- CI vs 지속적인 배포 vs 지속적인 배포
- 연속 배포 PIPELINE의 구조
- 배포 전략을 선택하는 방법
- 관찰성과 안전한 롤백의 중요성
- 연속 배포(Continuous Deployment)สำหร)Capacitor 및 Electron 앱
- CD 환경에서 보안 및 규정 준수
연속 배포란 무엇인가
개발자가 결제 수정을 병합합니다 main. pipeline은 애플리케이션을 빌드하고 자동화된 검사를 실행하고 결과를 검증하고, 변경 사항이 anyone이 클릭하지 않고도 '배포'를 클릭하지 않고도 프로덕션에 도달합니다. 그게 연속 배포.
정확한 정의는 간단합니다. 연속 배포는 자동으로 모든 code 변경 사항이 정의된 품질 게이트를 통과하면 프로덕션으로 직접 릴리스하는 연속 배포의 관행입니다. 인간이 최종 프로덕션 트리거에 남겨진 연속 배포와 연속 배포의 차이점은 간단합니다: 연속 배포는 여전히 연속 배포를 계속합니다. 연속 배포와 연속 배포의 차이점에 대한 북스플랑크의 안내서.
매일 변경 사항이 배포됩니다. 릴리스 매니저, 늦은 밤의 승인, '제품 준비' 버튼이 없습니다.
이것은 공격적인 것처럼 들릴 때까지 matures한 팀이 어떻게 운영되는지 살펴보면 이해가 됩니다. 그들은 빌드가 반복 가능하고 테스트가 신뢰되고 배포 단계가 스크립트화되고 프로덕션 동작이 빠르게 회귀를 잡을 수 있는 정도로 충분히 명확한 경우에만 최종 게이트를 제거합니다.
Capgo 팀에게는 이게 중요합니다. 릴리스 표면이 분할되어 있습니다. 네이티브 바이너리에는 여전히 스토어 리뷰가 필요하지만 자바스크립트, CSS, 콘텐츠 및 구성 변경은 종종 훨씬 빠른 경로를 통해 이동할 수 있습니다. 따라서 Capacitor 앱의 실용적인 CI/CD 워크플로가 더 이상 좋은 것을 갖고 싶은 것과 더불어 baseline으로 유지하기 위한 필수 조건이 됩니다. CI/CD 워크플로우는 Capacitor 앱에 적용됩니다. CI vs Continuous Delivery vs Continuous Deployment
대부분의 혼란은 팀이 CI/CD라는 단어를 사용하지만 실제로는 세 가지 다른 자동화 수준을 의미한다는 사실에서 비롯됩니다.
공장 analogy는 여기에서 잘 작동합니다.
연속적인 통합
부품을 조립하고 빌드가 여전히 함께 유지되는지 확인합니다. 연속적인 배포 빌드가 반복 가능하고 테스트가 신뢰되고 배포 단계가 스크립트화되고 프로덕션 동작이 빠르게 회귀를 잡을 수 있는 정도로 충분히 명확한 경우에만 제품으로 배포합니다. CI/CD 워크플로의 연속적인 배포는 팀의 행동을 변경합니다. 엔지니어들은 관련 없는 수정을 하나의 큰 릴리스에 묶지 않습니다. 제품 매니저들은 릴리스 일정을 기다리지 않습니다. 지원 팀은 한 주 전의 업데이트의 묘한 회귀 대신 작은, 쉽게 설명할 수 있는 변경 사항을 받습니다. targetLanguage pagePath protectedTokens
items
CI는 새로운 code가 정리되었습니다.
연속 배포
자동으로 트럭에 올려 배송 준비를 합니다.
실질적인 차이 CI는 새로운 __CAPGO_KEEP_0__가 정리되도록 통합했는지 여부를 묻습니다.연속 제공은 다른 질문에 답합니다: 이 빌드가 릴리즈 준비가 되었는지 여부를 묻습니다. 연속 배포는 한 단계 더 나아갑니다: 만약 준비가 되었다면 왜 기다리는 것일까요?.
| Aspect | 연속 통합 (CI) | 연속 제공 | 연속 배포 |
|---|---|---|---|
| 주요 트리거 | Code 커밋 또는 병합 | Code 커밋 또는 병합 | Code 커밋 또는 병합 |
| 핵심 목표 | 연속 빌드 및 테스트 | 소프트웨어를 언제든지 출시할 수 있도록 유지 | 검증된 변경 사항을 자동으로 출시 |
| 운영 배포 | 이것은 연속 배포의 초점이 아님 | 수동 트리거 필요 | 품질 게이트 통과 후 자동 |
| 인간 참여 | pipeline의 후반부에서 자주 필요 | 제품화 전에 필요 | 제품화 단계에서 제거 |
| 최적 | 기본적인 엔지니어링을 안정화하는 팀 | 제품 출시를 제어하는 팀 | 강력한 자동화 및 빠른 복구를 가진 팀 |
각 모델의 일상
CI CI는 시작점입니다. 팀이 안전하게 병합하고 빠른 빌드 피드백을 받을 수 없다면, 지속적인 배포에 대해 이야기하지 마세요.
지속적인 배포 지속적인 배포는 많은 좋은 팀이 오랫동안 머물러 있는 곳입니다. 반복 가능한 빌드, 자동화된 검증, 그리고 배포 준비가 된 아티팩트를 제공하며, 인간의 배포 결정이 보존됩니다.
실용적인 규칙: 승인자가 실제 문제를 발견하면, 수동 게이트를 유지하세요. 승인자가 주로 통과 빌드를 rubber-stamp하면, 게이트가 프로세스 극장일 수 있습니다.
지속적인 배포 자동화의 위험보다 기다리는 비용이 더 높을 때 지속적인 배포가 의미가 있습니다. 백엔드 서비스는 그 시점에 더 빨리 도달합니다. 하이브리드 모바일 앱은 웹 자산을 위해 그 시점에 도달할 수 있지만, 네이티브 패키지에 대해 아직 도달하지 못합니다.
지속적인 배포 PIPELINE의 구조
작동하는 PIPELINE은 신뢰의 연쇄입니다. 한 단계가 약해지면 '자동 배포'가 '자동 사고'로 변합니다.

병합 후에 무슨 일이 일어나는가?
정확한 pipeline은 일반적으로 code이 main branch에 도착할 때 시작됩니다. 그곳에서 시스템은 예측 가능한 순서로 실행되어야 하며, 숨겨진 운영자 단계가 없어야 합니다.
- Code 커밋. GitHub Actions, GitLab CI, CircleCI, 또는 다른 러너에서 merge가 트리거되면 pipeline이 실행됩니다.
- 빌드 및 테스트. 앱이 컴파일되고 의존성이 해결되고 자동 테스트가 실행됩니다.
- 아티팩트 생성. pipeline은 immutable한 것을 생성하여 승격하기 위해, 예를 들어 컨테이너 이미지를, 서명된 번들을, 패키지된 앱 자산 세트를 생성합니다.
- 스테이징 배포. 아티팩트는 프로덕션과 유사한 환경에 도착합니다.
- 검증. 스모크 테스트 및 환경 체크는 배포가 작동하는지 확인합니다.
- 프로덕션 배포. 만약 모든 게이트가 통과하면 자동으로 릴리즈가 발생합니다.
- 모니터링. 시스템은 변경이 라이브가 된 후 건강을 확인합니다.
IBM은 CI/CD 스펙트럼의 성숙한 끝으로 지속적인 배포를 설명하며, 자동화된 검증이 통과하면 릴리즈 이벤트가 별도로 필요하지 않으며, 릴리즈 일정이 필요하지 않아 개발이 끝난 후 몇 분만에 변경을 라이브로 할 수 있습니다. 또한, 릴리즈 일정이 필요하지 않아 릴리즈 일정을 별도로 정할 필요가 없으며, 개발이 끝난 후 몇 분만에 변경을 라이브로 할 수 있습니다. IBM에서 지속적인 배포에 대한 개요.
모바일 팀의 유용한 정신 모델은 배포 명령이 성공했을 때 pipe라인이 끝나지 않는다는 것입니다. 그것은 릴리즈가 건강할 때 끝납니다. 따라서 CI/CD pipeline을 공부하는 팀은 빌드 속도보다 검증 및 복구에 시간을 많이 투자합니다. CI/CD pipeline 설정 가이드 지속적인 배포에 대한 현대적인 소프트웨어 전달 관행
CI/CD pipeline을 설정하는 방법을 보여주는 Capacitor CI/CD pipe라인 설정 가이드 CI/CD pipeline을 설정하는 방법을 보여주는
CI/CD pipeline을 설정하는 방법을 보여주는
자동화에 신뢰하는 중요성
자동화에 신뢰하는 중요성은 단계를 구축하는 것이 아니라, 그 단계를 신뢰하여 프로덕션 이전에 인간의 중단을 제거하는 것이 어려움
성공하는 방법:
- 빠른 단위 및 통합 테스트 core 동작이 깨질 때 loudly하게 실패하는 것
- 실제 프로덕션 동작을 거의 닮은 스테이징 환경 artifact 불변성
- 검증한 정확한 것과 릴리즈하는 것 명확한 책임
- 게이트가 실패할 때. pipeline을 고치는 사람은 현재, 아니라 다음 스프린트. 실패하는 방법:
무엇이 작동하지 않는다:
- 수동 QA가 효과적인 게이트로 작용 pipeline이 자동화된 것처럼 행동하는 동안
- 장시간 테스트 스위트 개발자들이 체크를 피하는 것을 훈련시키는
- 스테이징과 프로덕션 사이의 환경이동 한 명의 릴리즈 엔지니어가만 알고 있는 마지막 순간 셸 스크립트
- 배포 전략 선택 한 개의 릴리스 엔지니어에게만 알려져 있습니다.
blue-green, canary, 및 rolling 배포 전략을 비교하는 다이어그램
blast radius를 줄이는 전략

__CAPGO_KEEP_0__
다양한 패턴은 다양한 문제를 해결합니다.
블루/그린 배포 두 환경을 유지합니다. 하나는 사용자에게 제공하고, 다른 하나는 새로운 버전을 보관합니다. 검증 후 트래픽을 전환합니다. 이 방법은 깨끗한 전환과 빠른 되돌아올 수 있는 방법이 필요할 때 유용합니다.
카나리 배포 작은 사용자나 트래픽의 조각을 새로운 버전으로 보내고, 건강이 좋으면 롤아웃을 확장하고, 그렇지 않으면 문제가 널리 퍼지기 전에 다시 당기면 됩니다.
롤링 배포 인스턴스를 batch로 업데이트합니다. 서비스 환경에서 용량을逐渐 교체하는 것이 유지하는 중복 스택을 유지하는 것보다 더 쉽기 때문에 일반적입니다.
기능 플래그 배포와 출시를 분리합니다. Code은 기능이 활성화되지 않은 상태로 프로덕션에 도달할 수 있습니다. 제품, 지원, 또는 엔지니어링 팀이 기능을 노출하기 전까지.
스테이지드 롤아웃 모바일 및 데스크톱 앱에서 특히 중요합니다. 베타 사용자, 내부 직원, 또는 특정 고객 그룹에 빌드 또는 OTA 업데이트를 푸시하고, 검증 후 노출 범위를 확장할 수 있습니다.
실무에서 선택하는 방법
GitLab의 CI/CD 지침은 준비가 용어보다 더 중요하다는 점을 강조합니다. 수동 프로덕션 게이트를 제거하는 결정은 테스트, 관찰성, 롤백 기능의 성숙도에 따라 GitLab의 CI/CD 운영 준비성 논의에서 언급한 바와 같이 달라집니다. CI/CD 운영 준비성.
다음은 각 옵션의 적합한 시점입니다:
- blue/green을 선택하세요. 다운타임이 불가피하고 병렬 환경을 유지할 수 있는 경우.
- canary를 선택하세요. 변경이 위험한 논리, 사용자 흐름, 또는 외부 통합을 건드릴 때.
- rolling을 선택하세요. 인프라스트럭처의 단순성보다 즉시 전환을 우선시할 때.
- feature flags를 선택하세요. code가 사업이 준비되기 전에 준비되면.
- phased audience rollout을 선택하세요. 다양한 사용자 그룹이 다른 수준의 노출이 필요할 때.
배포 전략은 위험 관리이며, 세련된 기술의 상징이 아니다.
Capacitor 및 Electron 앱의 경우, 단계적 배포 및 기능 플래그가 가장 큰 역할을 한다. 이들은 하이브리드 팀이 제품을 출시하는 방식과 일치한다. 공유 웹层를 빠르게 업데이트하고, 하나의 채널에 노출시키고, 보다 광범위한 릴리즈를 지연시키기까지 한다. 이때, 모니터링 결과가 깨끗할 때까지.
관찰성 및 안전한 롤백의 중요성
관찰성 없는 지속적인 배포는 추측이다. 릴리즈를 자동화할 수 있지만, 시스템이 변경이 출시된 후에 무슨 일이 일어났는지 알려주지 않으면 신뢰를 자동화할 수 없다.

릴리즈 후에 무엇을 관찰해야 하는가
모니터링은 알려진 지표가 임계값을 넘어섰는지 알려준다. 관찰성은 더 나아간다. 시스템이 프로덕션에서 이상한 것을 나타내면 엔지니어들이 새로운 질문을 할 수 있도록 충분한 맥락을 제공한다.
일반적으로, 다음을 관찰한다.
- 로그 애플리케이션 오류, 실패한 작업 및 예상치 못한 에지 케이스를 위해.
- 메트릭스 지연 시간, 오류율, 충돌 패턴 및 서비스 상태를 위해
- 트레이스 특정 배포 경로 이후에만 감소하는 요청을 위해
배포 이벤트와 직접 연결된 시각성을 가져야 합니다. 문제가 발생하는 릴리스를 즉시 해결하기 위해, 온콜 엔지니어는 별도의 시스템을 검색하는 대신에, 타이밍을 연관시킬 수 있어야 합니다. 이 워크플로를 개선하는 팀은 인시던트 리스폰스 자동화에 집중하는 도구에서 아이디어를 빌려옵니다. 인시던트 리스폰스 자동화,릴리스 복구와 인시던트 처리는 실제로는 상당히 중첩되어 있습니다.
롤백이 일상화되어야 합니다.
롤백은 '연속적인 배포'에 대한 많은 이야기들이 무너지는 곳입니다. 롤백이 선배 엔지니어의 깨어있는 상태나 마지막 안정 버전의 완벽한 기억에 의존한다면, 준비가 되지 않았습니다.
롤백 프로세스가 사용 가능한 것은 몇 가지 특성을 가집니다:
- 롤백 프로세스는 빠르다. 엔지니어는 한 번의 액션 또는 자동화된 규칙으로 마지막으로 좋은 상태를 복원할 수 있습니다.
- 롤백 프로세스는 테스트됩니다. 롤백은 이론적인 것이 아닙니다. 팀은 스테이징 또는 제어된 생산 조건에서 이를 수행했습니다.
- 관찰할 수 있습니다. 반환된 버전이 문제를 해결했는지 확인할 수 있습니다.
- 범위가 지정됩니다. 서비스 하나, 기능 플래그 하나, 또는 업데이트 채널 하나만 롤백할 수 있습니다. 관련된 작업을 취소하지 않습니다.
하이브리드 앱 팀에게 롤백은 더 큰 중요성을 가집니다. 사용자는 앱이 재시작되거나 새로 고침될 때까지 나쁜 업데이트를 계속 실행할 수 있습니다. 채널 기반 롤백 계획은 일괄적인 복원보다 안전합니다. 따라서 CI/CD 워크플로우의 롤백 전략 실제로 작동하는 것이 중요합니다.
빠른 배포는 사용자 영향보다 복구가 빠르면만 장점입니다.
Capacitor 및 Electron 앱에 대한 지속적인 배포
하이브리드 앱은 다른 정신 모델을 필요로합니다. Capacitor 또는 Electron 앱을 백엔드 서비스처럼 다루면 두 개의 중요한 릴리스 트랙을 놓치게 됩니다.

두 배포 경로가 아니라 하나
하이브리드 앱에는 자연스러운 쉘 그리고 웹层.
자연스러운 쉘에는 플랫폼 wrapper, 플러그인, 권한, 서명, 저장소 배포 패키지 등이 포함됩니다. 그 경로도 여전히 자연스러운 플랫폼 규칙을 따릅니다. 만약 자연스러운 code을 변경하거나 플러그인 동작, 권한, 패키징 세부 사항을 변경하면 앱 빌드, 서명, 저장소 제출과 같은 세계로 돌아갑니다.
웹层은 다릅니다. HTML, CSS, JavaScript, 콘텐츠 및 일부 구성은 일반적으로 훨씬 더 짧은 루프에서 움직일 수 있습니다. 앱의 이 부분은 제품 팀이 지속적으로 변경하는 부분이며, 지속적인 배포가 가장 큰 실제 이익을 창출하는 부분입니다.
이 분리는为什么 모바일 팀이 "지속적인 배포가 있습니까?"라는 질문을 멈추고 두 개의 더 좋은 질문을 시작해야 하는 이유입니다:
- 자연스러운 빌드와 제출을 자동화할 수 있나요?
- 설치된 앱에 웹 자산을 지속적으로 배포할 수 있나요?
많은 Capacitor 팀에게 첫 번째 질문의 대답은 "일부"입니다. 두 번째 질문의 대답은 "예"일 수 있습니다. 만약 업데이트 경로가 잘 설계되어 있다면.
실용적인 하이브리드 릴리스 모델
A 작업 가능한 모델은 다음과 같습니다.
첫 번째 경로: 네이티브 릴리스
CI를 사용하여 iOS, Android 또는 데스크톱 패키지를 쉘 변경 시마다 빌드합니다. 네이티브 테스트, 서명 단계 및 배포 자동화 실행. 이 PIPE라인을 강하게 유지하되, 순수 웹 배포 모델처럼 행동하지 마십시오.
두 번째 경로: 웹 자산 릴리스
변경 사항이 공유 웹 앱에 존재할 때 CI가 웹 번들 빌드, 테스트 실행, 릴리스 페이로드 서명, 롤아웃 채널(내부, 베타, 또는 프로덕션)에 배포합니다. 이는 앱의 가장 빠르게 움직이는 부분에 대한 루프를 닫습니다.
일반적인 운영 패턴은 다음과 같습니다.
- 개발자는 웹 픽스를 병합합니다.
- CI는 웹 자산을 빌드합니다.
- 자동 테스트 및 유효성 검사 통과
- 번들은 서명되고 제한된 채널에 배포됩니다.
- 관찰 가능성은 건강한 수용과 주요 회귀가 없는지 확인합니다.
- 같은 번들은 더 넓게 확장됩니다.
Live update 플랫폼은 현대적인 연속 배포 전략의 핵심 구성 요소가 됩니다. 이들은 설치된 앱에 유효한 웹 번들을 배포하는 것을 처리합니다. 매번 전체 네이티브 릴리스를 기다리지 않고. 하나의 옵션은 Capgo지속적인 배포는 Capacitor 및 Electron 워크플로우를 위한 signed over-the-air 업데이트, 채널 기반 롤아웃, CI/CD 통합 및 롤백 제어를 제공합니다.
유효한 웹 번들을 설치된 앱으로 즉시 배포하는 것을 처리합니다.
유효한 웹 번들을 설치된 앱으로 즉시 배포하는 것을 처리합니다. CI/CD 도구가 OTA 업데이트 트리거합니다. 빌드 시스템은 단순히 아티팩트를 생성하는 것이 아니라 업데이트가 어디로 가고, 어떤 조건에서, 그리고 필요할 때 어떻게 되돌아 오는지 결정해야 합니다.
하이브리드 앱의 연속 배포는 일반적으로 웹层의 연속 배포를 먼저, 그리고 네이티브层의 자동화된 배포를 두 번째로 의미합니다.
보안 및 규정 준수
보안 팀은 “자동화된 프로덕션 릴리스”를 듣고 risk가 증가했다고 생각합니다. 그러나 실제로 잘 구성된 pipeline은 repeatable policy를 통해 undocumented human steps를 대체하여 제어를 향상시킬 수 있습니다.
빠른 배포는 여전히 제어할 수 있습니다.
보안 CD 설정은 보안 검사를 더 일찍 푸시합니다. 정적 분석, 의존성 스캐닝, 아티팩트 서명 및 정책 검사는 pipe라인에 속해야 하며, 분리된 릴리즈 스캔블레에 속하지 않아야 합니다. 만약 빌드가 규칙을 위반한다면, 그것은 앞으로 진행되지 않아야 합니다.
이 모델은 더 깨끗한 감사 기록을 생성합니다. 저장소는 누가 무엇을 변경했는지 보여줍니다. pipe라인은 어떤 검사를 실행했는지 보여줍니다. 배포 시스템은 어떤 것이 프로덕션에 도달했는지 및 언제 도달했는지 보여줍니다. 일반적으로 수동 승인, 채팅 메시지 및 공유 릴리즈 스크립트를 기반으로 하는 프로세스를 savun하는 것보다 더 쉽습니다.
감사관이 일반적으로 관심을 기울이는 것
대부분의 감사관은 인간이 배포 버튼을 클릭했는지 여부를 신경 쓰지 않습니다. 그들은 조직이 제어를 증명할 수 있는지 여부를 신경 쓰릅니다.
그것은 일반적으로 몇 가지 질문으로 귀결됩니다:
- 릴리즈 전에 변경이 검토 및 유효화되었습니까?
- code 경로 또는 정책이 승인된 사람을 보여주세요.
- 유효화 후 아티팩트가 변경되지 않았는지 증명할 수 있나요?
- 업데이트를 받은 사용자 또는 채널을 식별할 수 있나요?
- 잘못된 릴리즈를 즉시 취소하거나 롤백할 수 있나요?
모바일 팀이 웹 업데이트를 설치된 앱으로 배포하는 환경이라면, 서명된 페이로드, 채널 권한 및 버전 기록은 매우 중요합니다. 그 컨트롤은 내부 보안 검토를 만족시키면서 배포 속도를 유지할 수 있습니다. 만약 당신의 환경이 그러하다면 CI/CD pipe라인에 보안 및 규정 준수 경계를 설치한 OTA 업데이트 은 올바른 운영 모델입니다.
만약 Capacitor 또는 Electron 앱을 배포하고 signed 업데이트, 롤아웃 채널, 관찰성, 롤백 제어와 같은 지속적인 배포를 원한다면 Capacitor를 살펴보세요. Capgo. 앱 스토어의 일정은 정기적인 수정에 너무 느립니다.