Infrastructure as Code : How we 팀 규모를 수용하기 위해 개발 / 출시 프로세스를 개선했습니다.

(2020 년 12 월 11 일)

이 기사에서는 과거에 지속적 배포 프로세스를 처리 한 방법과 우리가 가진 것을 변경하게 된 요인, 그리고 프로세스를 가능한 한 간단하고 / 효과적으로 만들기 위해 어떤 노력을했는지.

이 기사는 DevOps 초기의 맛을 제공 할 수 있지만 본질적으로 릴리스 프로세스는 모든 팀과 팀이 자체적으로 작동하는 방식에 영향을 미칩니다. 또는 다른 팀과 협력하여 프로세스를 변경함으로써 역할이 어떻게 바뀌고 있는지 보여줄 것입니다.

회사 소개

Halan은 차량 안내 및 주문형 물류 솔루션 제공을 지원합니다 ( 할부, 배송, 온라인 결제, 전자 상거래) 기존의 운송 및 기타 서비스 기술로 소외 계층을위한 당사의 ap를 확인할 수 있습니다. p 여기 ( android / iOS )

이전 프로세스 제공 정당한 점, 좋은 점과 나쁜 점

과거에 프로세스를 처리 한 방법과 그것이 우리에게 긍정적 또는 부정적으로 어떤 영향을 미쳤는지부터 시작하겠습니다.

저희 팀에게는 버전 제어 시스템으로 GitHub를 사용하여 AWS를 통해 배포 된 거의 모든 항목이 있으므로 GitHub 리포지토리에서 AWS 서비스로 기능을 제공하는 방법을 찾아야합니다.

버전 제어 배포

우리는 AWS 코드 파이프 라인 에 의존하여 배포 파이프 라인을 시작하도록 트리거를 설정했습니다. 새 커밋이 알려진 단계를 나타내는 주요 분기 중 하나로 병합 될 때마다 : dev , prod 스테이징 환경.

배포 트리거 방법에 대한 개요

이 흐름은 마스터 브랜치의 모든 기능은 프로덕션, 에 포함되어 있으며 모든 사람이 논의 할 수있는 금기 사항을 마스터하기 위해 병합해야합니다. 마스터에 PR을 병합 할 수있는 권한 입니다.

다른 지점의 경우도 마찬가지지만 그렇지 않았습니다. 개발 및 스테이징 환경은 그다지 무서운 것이 아니기 때문에 정말 문제가됩니다.

우리의 QC는 스테이징에서 병합 될 때 기능을 테스트하고 검증하기 시작했습니다. 즉, 스테이징 환경에서 먼저 테스트 한 다음 검증되면 , 기능이 마스터 브랜치에 병합됩니다. 잘 작동하는 것 같지만 그러한 프로세스의 단점을 살펴 보겠습니다.

이를 통해 각 단계 (개발, 스테이징)에서 동시에 여러 기능을 테스트하고 배포 할 수있었습니다. 그 이유는 다음과 같습니다.

  • 즉, 개발자가 개발 / 준비 환경을 제어하기 위해 서로 기다릴 필요가 없습니다.
  • 하지만 개발 단계에서 실수로 서로가 작동하지 않음 또는 work (거짓 긍정), 두 경우 모두 정말 나쁘고 코드가 실제로 작동하지 않는 동안 프로덕션이 진행되도록합니다.

분기 분기, 불필요한 리베이스

이미 눈치 채 셨겠지만 배포하기 위해 dev env의 경우 dev 브랜치에서 코드를 병합해야합니다. 그 부분은 슬프게도 브랜치의 타임 라인을 다음과 같이 빠르게 망쳤습니다.

  • dev에서 테스트 한 모든 기능이 프로덕션에 들어가는 것은 아니므로 통합 개발 브랜치에 고스트 커밋처럼 배치되었습니다. .
  • 의심 할 여지없이 실험 실험실에서 사람들은 자신이 잠시 후 뭔가 잘못되었다는 사실을 발견하고 코드 / 커밋을 삭제하고 새 커밋을 시작하기로 결정할 수 있지만 여전히 이전 커밋으로 남아 있습니다. 기능 iv id = “을 병합하기 위해 이러한 종류의 동작이 브랜치 간 발산이라고 부르는 것을 생성했습니다.

마스터가 base 인 bae537b217 “>

브랜치의 경우 충돌 ! 문자 그대로 유령과 충돌하고 생산 에 더 이상 진행되지 않을 일을 해결하는 것이 이상합니다. 두 가지 좋지 않은 옵션 :

  • 원래 기능 브랜치에서 분기 된 기능에 대한 새 브랜치를 빌드하고 이에 대한 충돌을 해결 한 다음 테스트가 완료되면 원본 브랜치를 마스터에 병합합니다.
  • 브랜치의 충돌을 해결 한 다음 마스터로 병합 할 때 커밋을 새 브랜치로 선택하세요.

더 많은 개발자가 팀에 합류함에 따라 상황이 더 추악해질 것입니다. 그리고 분기는 확실히 증가 할 것입니다.

빌드 / 배포 프로세스 개선

우리가 가장 먼저 염두에 둔 것은 이러한 분기를 제거하는 방법입니다. 새로운 방법이 필요합니다. 기능을 프로덕션에 안전하게 제공하고 배포 비즈니스에서 소스 제어를 사용하지 않고 프로덕션에 배포되는 기능의 수를 제어합니다.

AWS에 대한 간단한 검토

먼저 주요 기능을 식별해야합니다. 프로세스에서 우리와 함께 역할을 할 요소 :

  • Github : 소스 제어 모든 마이크로 서비스에 대한 저장소가 있습니다.
  • Amazon ECR : Docker 이미지 레지스트리 repos로 구분되며 각 저장소는 마이크로 서비스를 나타내며 서비스 X 용으로 푸시되었으며이 서비스에 직접 사용하거나 배포하여 작동 할 수있는 이미지입니다.
  • Amazon ECS / EC2 / EKS : 마이크로 서비스가 환경과 함께 살고있는 곳입니다. ECS는 클러스터로 나뉘며 각 클러스터에는 여러 서비스가 있으며 각 클러스터에는 환경 변수와 같은 정보를 보유하는 작업 정의가 있습니다. , 컴퓨팅 사양, 네트워크 등입니다.

따라서 개발 팀이 기능을 더 쉽게 제공하고 QC가 기능을 제어하고 확인할 수 있도록 이들을 결합하는 방법을 찾아야합니다.

우리는 iv를 담당하는 서비스 인 중개인 서비스를 정의 할 수 있다고 생각했습니다. id = “9078fcb5c1″>