선생님들~ 안녕들하셨는지요~? BTC_조랭이 입니다!
이번 포스트에서는 지난주에 이어서 AWS에서의 CI/CD 환경 구축에 대해 알아보겠습니다.
(포스트는 이주연님의 블로그를 적극 참고하여 제 방식대로 보기 좋게 작성했습니다.)
1. 배포 EC2 인스턴스 생성 및 CodeDeploy 에이전트 설정
CodeDeploy를 통해 배포될 서버를 생성하고 설정합니다.
CodeDeploy 에이전트는 배포에서 사용할 수 있게 해주는 소프트웨어 패키지입니다.
ㄴ 먼저, EC2 인스턴스를 만들어주고,
ㄴ EC2인스턴스에 CodeDeploy가 웹서버를 설정하는 스크립트 입니다.
ㄴ CodeDeploy에서 설정하기 위한 태그를 지정해줍니다.
2. CodeDeploy 애플리케이션 생성
애플리케이션: 배포하고자 하는 소프트웨어 애플리케이션이 포함된 리소스입니다.
해당 애플리케이션을 Codepipeline과 함께 사용하여 배포를 자동화할 수 있습니다.
ㄴ 애플리케이션을 생성,
ㄴ 애플리케이션 이름 입력 후, 컴퓨팅 플랫폼에서 EC2/온프레미스를 선택합니다.
3. CodeDeploy 배포그룹 생성
배포그룹: 배포할 인스턴스, 배포 속도와 같은 배포 관련 설정을 정의하는 리소스입니다.
ㄴ애플리케이션이 표시되는 페이지에서 '배포 그룹 생성'을 선택합니다.
ㄴ 배포그룹 이름과 CodeDeployRole 서비스 역할을 선택합니다.
ㄴ 배포 유형은 현재 위치로 선택한다. 환경 구성에서 Amazon EC2 인스턴스를 선택합니다.
키 필드에서 배포할 인스턴스를 선택합니다.
ㄴ 배포 설정에서 해당하는 것을 선택합니다.
(CodeDeployDefault.OneAtaTime) 배포 설정에서 선택할 수 있는 사항은 다음과 같습니다.
- CodeDeployDefault.AllAtOnce : 한 번에 가급적 많은 수의 인스턴스에 애플리케이션 개정을 배포합니다. 어떤 인스턴스에도 애플리케이션 개정이 배포되지 않으면 전체 배포 상태가 실패로 표시됩니다.
- CodeDeployDefault.HalfAtATime : 최대 절반의 인스턴스에 한번에 배포합니다. 애플리케이션 개정이 인스턴스의 절반 이상에 배포되면 전체 배포가 성공합니다. 그렇지 않으면 배포가 실패합니다.
- CodeDeployDefault.OneAtATime : 한 번에 한 인스턴스에만 애플리케이션 개정을 배포합니다.
ㄴ 배포 그룹 설정이 완료된 것을 확인한다.애플리케이션이 EC2/온프레미스 컴퓨팅 플랫폼을 사용하는 경우, AppSpec file이 필요합니다.
AppSpec file은 appspec.yml이라는 YAML 형식 파일이어야 하며 애플리케이션 소스 코드의 루트에 저장해야 합니다.
appspec은 다음과 같이 작성될 수 있습니다.
version: 0.0
os: linux
files:
- source: app.js
destination: /var/www/
hooks:
BeforeInstall:
- location: install_dependencies.sh
timeout: 300
runas: root
ApplicationStart:
- location: start_server.sh
timeout: 300
ApplicationStop:
- location: stop_server.sh
timeout: 300
runas: root
ValidateService:
- location: validate_server.sh
timeout: 300
runas: root
- source : 인스턴스에 복사할 업데이트 파일 또는 디렉터리를 식별합니다.
- destination : 인스턴스에서 파일이 복사되어야 하는 위치를 식별합니다.
마지막으로, 배포할 EC2 인스턴스에서 CodeDeploy 에이전트가 실행 중인지 여부를 확인합니다.
다음은 CodeDeploy 에이전트 상태를 확인 및 시작하는 명령어입니다.
sudo service codedeploy-agent status
sudo service codedeploy-agent start
4. CodePipeline 생성 및 연결
이전에 만들었던 CodeCommit, CodeBuild, CodeDeploy를 연결하게 되면, 바로 CodePipeline을 통해 배포 가능합니다.
ㄴ 파이프라인 설정 선택의 파이프라인 이름을 입력하고, 서비스 역할에서 CodePipeline이 IAM에 서비스 역할을 생성하도록 허용합니다.
아티팩트 스토어 및 암호화 키를 지정합니다.
ㄴ 소스 단계 추가의 소스 공급자에서 AWS CodeCommit를 선택합니다.
이전 단계에서 생성한 CodeCommit 리포지토리 이름을 선택합니다. 브랜치 이름에서 master를 선택합니다.
빌드 단계 추가에서 이전 단계에서 진행했던 프로젝트를 선택합니다.
빌드 단계 또는 배포 단계는 스킵이 가능합니다. 하지만 빌드 단계와 배포 단계 모두 스킵할 수 없습니다.
배포 단계 추가의 배포 공급자에서 AWS CodeDeploy를 선택합니다.
애플리케이션과 배포그룹은 이전 단계에서 생성한 이름을 선택합니다.
ㄴ 검토에서 정보를 확인하고, 파이프라인 생성을 선택합니다.
ㄴ 파이프라인이 성공적으로 실행되었는지 확인하려면, 파이프라인의 초기 진행 상황을 확인해야 합니다.
각 단계의 상태는 [No executions yet]에서 [In Progress]로 바뀌며, 다시 [Succeeded]나 [Failed] 중 하나로 바뀝니다. 파이프라인 상태가 성공 또는 실패로 표시되면 Staging 단계의 상태 영역에서 세부 정보를 통해 자세한 상태를 확인할 수 있습니다.
AWS만 이용하거나, GitHub 외의 다른 저장소를 이용할 경우 유용한 구성 방법이라고 합니다. CI/CD 환경을 구축하는 다양한 방법이 있지만, 하나의 CSP 안에서 서비스를 사용해 구축한다면 구축 및 전체 Flow 관리가 확실히 편해지는 것 같습니다.
하지만 그만큼 비용이 증가할 수 있고, AWS에 종속될 수 있기 때문에, 내부 상황이나 정책에 따라서 적절히 서비스를 사용하는 것이 좋을 것 같습니다.
참고자료: 이주연님 블로그 (https://joobly.tistory.com/5)
'INFRA > DevOps' 카테고리의 다른 글
쿠버네티스 오브젝트 (0) | 2022.05.17 |
---|---|
Jenkins Pipeline (1) (0) | 2022.05.17 |
k8s 노드간 통신 (0) | 2022.05.13 |
yaml 문법 (0) | 2022.05.12 |
AWS CI/CD 환경 구축 1편(CodeCommit, CodeBuild, CodeDeploy, Codepipeline) (0) | 2022.05.06 |
댓글