Apollo 릴리스 채널과 승격
릴리스 채널(Release Channel)은 안정성이나 레이블 같은 공통 특성을 기준으로 제품 릴리스와 모듈 릴리스를 묶습니다. 운영자는 배포 개체가 추적할 채널을 선택하고, Apollo는 그 채널에서 사용할 수 있는 릴리스와 환경의 조건을 함께 평가합니다.
배포 개체는 실제 적용되는 유지보수 시간대 안에서 관련 제약 조건을 통과하는 최신 릴리스로 업그레이드될 수 있습니다.
채널에 릴리스를 추가하는 방법
릴리스를 채널에 추가하는 방법에는 세 가지가 있습니다.
| 방법 | 적용 방식 |
|---|---|
| 게시 시 자동 분류 | 버전 형식에 따라 기본 채널에 자동으로 추가 |
| 수동 승격 | 권한을 가진 채널 기여자가 레이블 요건을 충족하는 릴리스를 추가 |
| 승격 파이프라인 | 정해진 채널 순서와 조건에 따라 릴리스를 자동으로 추가 |
릴리스 승격(release promotion)은 릴리스가 다음 채널에서 사용될 수 있도록 하는 과정입니다. 해당 채널을 구독하는 모든 배포 개체에 같은 시각에 변경을 실행하는 명령은 아닙니다.
기본 채널과 버전 형식
Apollo의 기본 채널은 DEV, RELEASE_CANDIDATE, RELEASE입니다. 제품을 게시할 때 버전 유형에 따라 다음과 같이 채널에 추가됩니다.
| 버전 유형 | 자동으로 추가되는 기본 채널 |
|---|---|
| Release | DEV, RELEASE_CANDIDATE, RELEASE |
| Release Candidate | DEV, RELEASE_CANDIDATE |
| 그 밖의 버전 유형 | DEV |
이 분류에서 버전의 형식이 중요합니다. 1.0.0과 1.0.0-rc1은 서로 다른 유형의 버전이며 같은 기본 채널 집합에 추가되지 않습니다. 버전 형식은 제품과 릴리스에서 설명합니다.
기본 채널 외에 사용자 정의 채널도 구성할 수 있습니다. 조직에서 STABLE이나 CANARY 같은 이름을 사용하더라도 그 이름이 모든 Apollo 환경의 기본 채널이라는 뜻은 아닙니다.
수동 승격
릴리스 채널 기여자는 릴리스를 자신의 채널에 수동으로 추가할 수 있습니다. 이때도 대상 채널의 레이블 요건을 충족해야 합니다.
수동 승격은 다음과 같은 경우에 사용할 수 있습니다.
- 다음 채널로 보내기 전에 사람이 시험하거나 검토해야 하는 경우.
- 안정성 문제에 대응하면서 자동 승격 파이프라인과 다른 순서로 릴리스를 제공해야 하는 경우.
수동으로 채널에 추가하는 권한과 배포 환경에서 변경을 허용하는 권한은 별개의 관리 책임입니다.
승격 파이프라인 구성
제품과 모듈의 편집자는 릴리스 승격 파이프라인을 설정할 수 있습니다. 파이프라인에는 다음을 정의합니다.
- 최종 채널에 도달하기까지 거칠 채널의 순서.
- 각 단계에서 충족해야 하는 조건.
자동 승격에서는 유지보수 시간대와 레이블 요건을 적용할 수 있습니다. 제품 릴리스의 파이프라인에는 상태 관련 승격 조건도 구성할 수 있습니다. 모듈 릴리스의 파이프라인에는 같은 상태 요건을 구성하지 않습니다.
가상의 파이프라인이 후보 채널에서 시작하여 일부 대상의 상태를 관찰한 뒤 안정 채널로 이동한다고 가정하겠습니다. 제품팀은 어느 단계에서 어떤 조건을 확인할지 정하고, 환경 운영팀은 자신의 환경이 어느 채널을 구독할지 정합니다. 이 구성을 통해 릴리스의 제공 단계와 환경의 적용 조건을 나누어 관리할 수 있습니다.
허브의 기본 승격 파이프라인
허브 관리자는 새 제품과 모듈이 사용할 기본 승격 파이프라인을 설정할 수 있습니다.
새 제품 또는 모듈의 첫 릴리스를 게시할 때 Apollo는 해당 허브의 기본 구성을 사용해 파이프라인을 채웁니다. 이후 허브의 기본 파이프라인을 바꾸더라도 이미 파이프라인이 설정된 기존 제품이나 모듈에 소급하여 적용되지는 않습니다.
파이프라인이 아직 없는 기존 제품에는 관리자가 기본 구성을 적용할 수 있습니다.
카나리와 안정성 관찰 기간
카나리(Canary)는 새 릴리스를 먼저 적용하여 상태를 관찰하는 대상의 맥락에서 사용합니다. 안정성 관찰 기간(soak duration)은 그 상태를 확인하도록 구성한 기간입니다.
새 버전이 카나리에 도달하는 과정과 그 버전의 상태를 충분히 관찰하는 과정은 다릅니다. 아직 카나리가 해당 버전에 도달하지 못했다면 관찰 결과를 평가하는 단계로 진행할 수 없습니다. 이 두 상태에는 서로 다른 시간 제한이 적용됩니다.
승격의 시간 제한
승격이 무기한 진행 상태에 머무르지 않도록 다음 시간 제한을 적용합니다.
| 제한 | 취소되는 조건 | 시간 계산과 예외 |
|---|---|---|
| 안정성 관찰 시간 제한 | 설정한 관찰 기간의 두 배가 지날 때까지 상태 조건을 충족하지 못함 | 주말을 제외한다. 관찰 중인 버전이 출발 채널의 회수되지 않은 최신 릴리스라면 이 제한을 비활성화한다. |
| 카나리 도달 대기 제한 | 카나리 배포 개체가 승격 중인 버전에 도달하지 못한 채 7일이 지남 | 주말을 제외하는 시간 제한이다. |
| 전체 승격 시간 제한 | 승격이 시작된 뒤 30일이 지남 | 실제 달력 시간을 사용하며 주말도 포함한다. |
예를 들어 관찰 기간이 24시간이면, 주말을 제외한 시간이 48시간 지날 때까지 상태 요건을 충족하지 못하면 관찰 시간 제한에 걸릴 수 있습니다. 다만 출발 채널의 회수되지 않은 최신 릴리스를 관찰하는 경우에는 더 새로운 후보가 없으므로 이 관찰 시간 제한을 적용하지 않습니다.
전체 30일 제한은 개별 관찰 제한과 별개입니다. 레이블 요건이나 유지보수 시간대를 계속 기다리는 경우처럼 다른 단계에 머무르는 상황에서도 전체 시간이 제한을 넘으면 취소될 수 있습니다.