AWS CI CD리소스를 통하여 어떻게 브랜치 운영의 끝판왕인 GitFlow를 구현할 지 설명하는 포스팅이다.
Implementing GitFlow Using AWS CodePipeline, AWS CodeCommit, AWS CodeBuild, and AWS CodeDeploy | Amazon Web Services
This post provides a high-level framework for how to implement GitFlow using AWS CodePipeline, AWS CodeCommit, AWS CodeBuild, and AWS CodeDeploy. We also provide AWS CloudFormation templates and AWS CLI commands to help you get going. Before we begin, we w
aws.amazon.com
시작전에 Trunk-based development를 통하여 CI를 구축하려는 Amazon 팀을 칭찬한다.
Trunk-based development란 개발자들이 규칙적으로 그들의 Code변화를 중앙 Repository에 Merge함으로써 복잡성을 정기적으로 줄일 수 있는 방안이라고 생각한다. 이런 Trunk-Based Continuouse Integration은 Production에 변화를 줄때 Lead-time을 줄여준다.
Gitflow는 여러 레벨의 Branch로 이루어 져있다. "Branch-Based Development" 이는 자칫 잘못하면 '낮은 빈도의 Merge→ Merge의 부담상승→길어지는 Lead-Time'을 유발할수 있음으로 주의하자.
기본적으로 Master브랜치는 Production-Ready로 사용하고 Develop Branch를 CI의 MainLine으로 사용한다. Master와 Develop 브랜치는 영구적이다. 그러나 Gitflow는 짧은 생명주기의 Feature를 추천한다.
GitFlow guidlines은 다음과 같다.
- 지속적인 CI를 위해 Develop 을 사용해라
- 복수의 feature 작업을 위해 feature branches를 사용해라
- Hotfix를 Master에 push코자 할때는 Master에서 branch를 별도로 따라
- 매 Release가 있을때마다 master에 Merge해라
- Master는 Production-Ready Code를 포함토록 해라
Master나 Develop과 같은 영구적 Branch는 다음 프로세스를 따른다
- AWS CodeCommit master/develop branch
- AWS CodeBuild 프로젝트는 모든 Branch에 사용되게 생성
- AWS CodeDeploy 어플리케이션은 모든 Branch에 사용되게 생성
- AWS Cloudformation stack (EC2 instance)을 Master(Prod)와 Develop(stage) 브랜치에 필요한 리소스 생성
임시적인 Branch는 다음을 따른다.
- AWS CodeCommit feature/hotfix/release branch
- 각 브랜치 마다 AWS CodePipeline을 생성한다.
- 각 브랜치 마다 AWS CodeDeploy로 development group을 만든다
- AWS Cloudformation stck (EC2 instance)을 각 브랜치 마다 생성하여 리소스를 생성한다.
기본 가이드라인(EC2혹은 On-Premise의 경우)
- 각각의 브랜치는 AWS CodePipeline을 갖고 있다.
- AWS CodePipeline은 CodeCommit을 Source Provider로, CodeBuild를 Build Provider로, CodeDeploy를 Deployment Provider로 구성되어 있다.
- AWS CodeBuild는 AWS CodePipeline를 Source로 구성된다.
- 각 AWS CodePipeline은 AWS CodeDeploy Deployment그룹을 가지고 배포를 위해 Name Tag를 사용한다.
- 단일 Amazon S3버킷은 artifact저장소로 사용된다. 그러나 분리해서 저장할 수 도 있다.
1. 아래의 AWS CloudFormation 템플릿을 통하여 Master와 Develop의 환경,역할,Repository, VPC, EC2, CodeBuild, CodeDeploy, CodePipeline를 생성한다.
$ aws cloudformation create-stack --stack-name GitFlowEnv \ --template-body https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/e3211b1daa9f4bea93f703e17ef0026f/v1/aws-devops-workshop-environment-setup.template \ --capabilities CAPABILITY_IAM
$ aws cloudformation create-stack --stack-name GitFlowCiCd \ --template-body https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/e3211b1daa9f4bea93f703e17ef0026f/v1/aws-pipeline-commit-build-deploy.template \ --capabilities CAPABILITY_IAM \ --parameters ParameterKey=MainBranchName,ParameterValue=master ParameterKey=DevBranchName,ParameterValue=develop
![](https://blog.kakaocdn.net/dn/dOxA2X/btrqCaJwa9j/Gm7p3X0Hder9eBx54786K0/img.png)
$ git flow init
$ git flow feature start <branch>
$ aws cloudformation update-stack --stack-name GitFlowCiCd \ --template-body https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/e3211b1daa9f4bea93f703e17ef0026f/v1/aws-pipeline-commit-build-deploy-update.template \ --capabilities CAPABILITY_IAM \ --parameters ParameterKey=MainBranchName,ParameterValue=master ParameterKey=DevBranchName,ParameterValue=develop ParameterKey=FeatureBranchName,ParameterValue=feature-x
![](https://blog.kakaocdn.net/dn/cFNPKK/btrqFjTLfKB/mhW37fVR2pYFUMKIxFsiNk/img.png)
$ git flow feature finish <feature>
$ aws cloudformation update-stack --stack-name GitFlowCiCd \ --template-body https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/e3211b1daa9f4bea93f703e17ef0026f/v1/aws-pipeline-commit-build-deploy.template \ --capabilities CAPABILITY_IAM \ --parameters ParameterKey=MainBranchName,ParameterValue=master ParameterKey=DevBranchName,ParameterValue=develop
'IaaS > 퍼블릭클라우드' 카테고리의 다른 글
(AWS) CloudFormation Resource, Parameter, Mapping에 대해 (0) | 2022.01.18 |
---|---|
(AWS) CloudFormation 이란? (0) | 2022.01.18 |
(AWS) CloudFormation을 통한 파이프라인 템플릿 만들기 (0) | 2022.01.13 |
(AWS) CodePipeline 이란? (0) | 2022.01.10 |
(AWS) Code Deploy 대상의 다양한 타입들 (0) | 2022.01.07 |