본문 바로가기
INFRA/DevOps

AWS DevOps CI/CD 환경 구축 2편(CodeCommit, CodeBuild, CodeDeploy, Codepipeline)

by BTC_조롱이 2022. 5. 13.

선생님들~ 안녕들하셨는지요~? BTC_조랭이 입니다!

이번 포스트에서는 지난주에 이어서 AWS에서의 CI/CD 환경 구축에 대해 알아보겠습니다.

(포스트는 이주연님의 블로그를 적극 참고하여 제 방식대로 보기 좋게 작성했습니다.)

AWS CodePipeline을 이용한 CI/CD 구성

 


1. 배포 EC2 인스턴스 생성 및 CodeDeploy 에이전트 설정

CodeDeploy를 통해 배포될 서버를 생성하고 설정합니다.
CodeDeploy 에이전트는 배포에서 사용할 수 있게 해주는 소프트웨어 패키지입니다.

ㄴ 먼저, EC2 인스턴스를 만들어주고,

ㄴ EC2인스턴스에 CodeDeploy가 웹서버를 설정하는 스크립트 입니다.

ㄴ CodeDeploy에서 설정하기 위한 태그를 지정해줍니다. 

 

2. CodeDeploy 애플리케이션 생성

애플리케이션: 배포하고자 하는 소프트웨어 애플리케이션이 포함된 리소스입니다.
해당 애플리케이션을 Codepipeline과 함께 사용하여 배포를 자동화할 수 있습니다.

ㄴ 애플리케이션을 생성,

 

ㄴ 애플리케이션 이름 입력 후, 컴퓨팅 플랫폼에서 EC2/온프레미스를 선택합니다.

 

3. CodeDeploy 배포그룹 생성

배포그룹: 배포할 인스턴스, 배포 속도와 같은 배포 관련 설정을 정의하는 리소스입니다.

ㄴ애플리케이션이 표시되는 페이지에서 '배포 그룹 생성'을 선택합니다.

 

ㄴ 배포그룹 이름과 CodeDeployRole 서비스 역할을 선택합니다.

 

ㄴ 배포 유형은 현재 위치로 선택한다. 환경 구성에서 Amazon EC2 인스턴스를 선택합니다.
키 필드에서 배포할 인스턴스를 선택합니다.

 

CodeDeploy 애플리케이션 내 배포그룹 설정

ㄴ 배포 설정에서 해당하는 것을 선택합니다.
(CodeDeployDefault.OneAtaTime) 배포 설정에서 선택할 수 있는 사항은 다음과 같습니다.

  • CodeDeployDefault.AllAtOnce : 한 번에 가급적 많은 수의 인스턴스에 애플리케이션 개정을 배포합니다. 어떤 인스턴스에도 애플리케이션 개정이 배포되지 않으면 전체 배포 상태가 실패로 표시됩니다.
  • CodeDeployDefault.HalfAtATime : 최대 절반의 인스턴스에 한번에 배포합니다. 애플리케이션 개정이 인스턴스의 절반 이상에 배포되면 전체 배포가 성공합니다. 그렇지 않으면 배포가 실패합니다.
  • CodeDeployDefault.OneAtATime : 한 번에 한 인스턴스에만 애플리케이션 개정을 배포합니다.

 

CodeDeploy 애플리케이션 내 배포그룹 생성 확인

ㄴ 배포 그룹 설정이 완료된 것을 확인한다.애플리케이션이 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 생성

ㄴ 파이프라인 설정 선택의 파이프라인 이름을 입력하고, 서비스 역할에서 CodePipeline이 IAM에 서비스 역할을 생성하도록 허용합니다.

아티팩트 스토어 및 암호화 키를 지정합니다.

 

 

CodePipeline 내 소스 스테이지

 

ㄴ 소스 단계 추가의 소스 공급자에서 AWS CodeCommit를 선택합니다.
이전 단계에서 생성한 CodeCommit 리포지토리 이름을 선택합니다. 브랜치 이름에서 master를 선택합니다.

 

CodePipeline 내 빌드 스테이지

빌드 단계 추가에서 이전 단계에서 진행했던 프로젝트를 선택합니다.
빌드 단계 또는 배포 단계는 스킵이 가능합니다. 하지만 빌드 단계와 배포 단계 모두 스킵할 수 없습니다.

 

CodePipeline 내 배포 스테이지

배포 단계 추가의 배포 공급자에서 AWS CodeDeploy를 선택합니다.

애플리케이션과 배포그룹은 이전 단계에서 생성한 이름을 선택합니다.

 

CodePipeline 검토

ㄴ 검토에서 정보를 확인하고, 파이프라인 생성을 선택합니다.

 

CodePipeline 대시보드

ㄴ 파이프라인이 성공적으로 실행되었는지 확인하려면, 파이프라인의 초기 진행 상황을 확인해야 합니다.

각 단계의 상태는 [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

댓글