본문 바로가기
배포 자동화

DevOps Day 35 (4.24) 배포 자동화_Sprint 서버 배포 파이프라인

by Jackykim 2023. 4. 25.

앞선 실습을 통해 클라이언트 배포 자동화 파이프라인을 구축했습니다. 이번 실습에서는 서버 배포 자동화 파이프라인을 구축하는 실습을 진행하겠습니다.

 

Bare Minimum
- AWS 개발자 도구 서비스를 이용해서 배포 자동화 파이프라인을 구축해야 합니다.

- CodePipeline을 이용해서 각 단계를 연결하는 파이프라인을 구축합니다.

- Source 단계에서 소스 코드가 저장된 GitHub 리포지토리를 연결합니다.

- Deploy 단계에서 CodeDeploy 서비스를 이용하여 EC2 인스턴스에 변경 사항을 실시간으로 반영합니다.

- 나중에 변경 사항을 GitHub 리포지토리에 반영했을 경우, 배포 과정이 자동으로 진행되어야 합니다.

- 배포 과정에서 오류가 생길 경우, log 파일을 참조하여 문제점을 확인할 수 있어야 합니다.

1. Github에서 repository fork + git clone 하여 로컬 환경에 소스 코드를 저장합니다.
2. EC2 인스턴스 선택하여 작업 -> 인스턴스 -> 태그 관리 들어가 태그 추가 합니다.
3. 태그 설정 완료 후 IAM 서비스를 이용해서 EC2 인스턴스에 역할을 부여합니다.
 - 작업 -> 보안 -> IAM 역할 수정

- 새로운 IAM 생성 합니다.
- 역할 만들기 버튼 들어갑니다.

- AWS 서비스 -> EC2 선택 후 다음 버튼으로 갑니다

- AmazonS3FullAccess, AmazonS3SSMFullAccess, AWSCodeDeployRole를 선택 합니다.

- 모두 선택 후 역할 생성 하면 됩니다.

- IAM 생성 후 IAM -> 역할 -> EC2Rule 에 들어가 ‘신뢰 관계’ 업데이트 해줍니다.

4. EC2 보안에 들어가 포트 및 IAM 역할이 잘 적용 됐는지 확인 합니다.

5. Github clone 한 repository 폴더에 appspec.yml 파일 추가 합니다.
 - appspec.yml은 배포 자동화를 도와즈는 codedeploy-agent가 인식하는 파일입니다.

6. 다음으로 최상위에 scripts 디렉토리를 생성한 후 그 안에 initialize.sh, start.sh, stop.sh 파일 3개를 생성합니다. 먼저 scripts 디렉토리를 생성 후 initialize, start, stopsh 파일을 만들어 내용을 채웁니다.

- 작성 완료 후 git push로 github repository에 업로드 합니다.

 

7. AWS Codedeploy 대시보드로 이동해 애플리케이션으로 이동하여 애플리케이션 생성합니다.

- 애플리케이션 이름 하고 컴퓨팅 플랫폼명 정하고 생성합니다

8. 애플리케이션이 생성되면, 생성한 애플리케이션의 배포 그룹 탭을 클릭하여 [ 배포 그룹 생성 ] 버튼을 클릭합니다.

- 배포 그룹의 이름을 임의로 입력하고, 서비스 역할 영역을 클릭한 후 전에 생성했던 'EC2Role'을 선택합니다.

- 환경 설정 선택 + 로드 벨런싱 활성화 체크 해제

- 생성 후 대시보드에 있는 파이프라인에 들어가 파이프라인 생성
- github에 연결 하고 필요한 정보 모두 기입

- 서버 코드(애플리케이션)는 코드의 컴파일과 빌드 과정이 필요 없고 테스트 코드도 없으므로, [ 빌드 스테이지 건너뛰기 ] 버튼을 눌러 빌드 단계를 생략합니다.

 

9. 배포 스테이지에 공급자 AWS CodeDeploy 선택하고 그전에 생성한 항목들을 선택합니다

10. Deploy 에서 실패하여 코드 수정 및 업데이트
 - “CodeDeploy agent was not able to receive the lifecycle event. Check the CodeDeploy agent logs on your host and make sure the agent is running and can connect to the CodeDeploy server.” Error 지속적으로 발생하여 Start.sh 수정

 

수정 코드

수정 코드

11. 수정후 다시 git push 하니깐 정상으로 작동

12. Postman으로 EC2 인스턴스 GET 요청하면 “Hello World” 뜹니다