본문 바로가기

AWS

AWS CodePipeLine, CodeBuild, CodeDeploy를 통해 EC2에 배포하기, AWS CI/CD 구축하기 - 2

서론

1편에서는 CodePipeline을 실제로 구축하기 이전에, 필요한 설정과 배포할 파일에 대해 다루었습니다. 이번 편에서는

드디어 실제로 CodePipeline을 생성하고 그에 필요한 CodeBuildCodeDeploy도 생성해보겠습니다.

앞서 말씀드렸듯이, CodePipeline 생성 중에 Codepipeline에서 쓰일 CodeBuild를 생성, 그리고 잠시 다른 창에서 CodeDeploy애플리케이션, 배포그룹을 생성한 뒤 CodePipeline의 생성을 마무리합니다.

 

이번 편은 그렇게 어렵지 않고, 길지 않고, 사진이 많으니 아마 따라오기 쉬우실 겁니다. 화이팅!

CodePipeline 설정 시작

우측 하단의 "파이프라인 생성"을 클릭해줍니다.

굳이 따로 IAM Role을 생성하고, 설정할 것 없이 새 서비스 역할을 클릭하고 아래 체크박스를 체크해주면, 자동으로 CodePipeline에서 필요한 권한을 가진 IAM Role이 생성됩니다!

이 부분은 자기 마음인데, 빌드 후 파일을 내가 지정하는 S3 버킷에 저장할 것인지, 기본 아티팩트스토어의 S3에 저장할 것인지 묻는 것인데, S3 버킷을 수작업으로 만들기 귀찮으면 그냥 기본위치를 선택해줍시다.

우리는 Github repository의 소스를 자동으로 받아올 것이므로 소스 공급자는 Github을 선택합니다.

이후 자기가 원하는 자신의 repository를 설정하고, 어차피 Github을 이용하니 브랜치에 푸시가 올 때 발생하는 웹훅을 이용해 CodePipeline을 실행시킵니다.

여기서 바로 CodeBuild 프로젝트를 생성해줄 것입니다.

이후 나타나는 CodeBuild 프로젝트 설정 팝업에서 환경은 자기 취향대로 설정해줍니다.

마찬가지로 역할은 따로 설정할 필요없이 새 서비스 역할로 자동 생성시킵니다.

buildspec.yml을 입력해줍니다.

CodeBuild 프로젝트 설정창에서 별다른 설정은 해줄 필요없습니다.

그 다음 CodeDeploy 애플리케이션을 입력하라는데, CodeDeploy는 CodePipeline을 생성중인 이 창에서 설정이 불가능하므로 다른 창을 띄워 CodeDeploy Application을 생성합니다.

이어서 배포그룹을 생성합니다.

언제 생성했는지 가물가물 잊어버릴 뻔 한 아까 생성한 CodeDeploy를 위한 IAM Role을 입력해주고, 간단하게 CodePipeline을 이용해보는 것이므로 블루/그린이 아닌 현재위치를 선택해줍니다.

EC2 를 선택하고, 아까 만든 EC2 의 Name을 이용해 검색해줍니다. 어차피 인스턴스가 한 대이므로 로드밸런서는 비활성화시키고 나면 배포그룹을 생성완료할 수 있습니다.

다시 CodePipeline으로 돌아와 방금 설정한 CodeDeploy의 내용을 입력해줍니다.

혹시나해서 전체적인 프로젝트 구조를 간략히 보여드립니다.

최상위에 package.json, node_modules, appspec.yml, buildspec.yml 등이 위치합니다.

혹시 자꾸만 Build가 Deploy나 "실패"하시나요?

너무 낙담하고 우울해하지마세요. 한 번에 될 리가 없습니다. 잠시 스트레칭 좀 하고 산책 좀 하고 다시 오셔서 차근차근 에러를 잡아봅시다. 그렇게 연습하고 알아보고 난 다음에 글을 쓰는 지금도 저도 한 세 번 오류가 났네요.

화이팅하세요~! ㅎㅎ...

CodePipeline을 통한 배포 테스트

express app에 우리가 Version 1.0이라고 적은 뒤 배포했었죠? 이번엔 tutorial/views/index.jade의 내용을 바꾸어 Version 2.0이라고 표시해봅시다.

extends layout

block content
  h1= title
  h2 Version 2.0
  p Welcome to #{title}

이후 다시 tutorial/views/index.jade의 수정내용을 git에 push 합시다.

잠시후 놀랍게도 자동으로 이렇게 새로운 버전의 app으로 업데이트된 것을 볼 수 있습니다~!

'엠메... 고작 이거냐..?' 싶을 수도 있지만, 실제로 배포작업을 해보신다면 이 작업이 얼마나 편리한 지 모릅니다 ...ㅜㅜ

이로써 CodePipeLine을 통해 EC2 에 자동으로 배포해보는 작업은 끝입니다! 고생하셨습니다.

마치며

후... 1편에 이어 2편까지 쓰려니까 참.. 쉽지 않았네요. 사진도 많구.. 그래도 덕분에 저도 한 번 더 잘 정리하게 된 것 같습니다. 다음 목표는 CodePipeline으로 ECS에 배포하는 것인데, Docker에 대해 나름 공부했었지만도 생각보다 ECS 를 다루기 위해선 훨씬 많은 지식이 필요하더군요. 조만간에 다뤄볼 수 있길 바랍니다.

 

[에러] appspec.yml hooks에서 환경변수나 npm, pip 등을 못찾는 경우

https://stackoverflow.com/questions/34032751/npm-issue-deploying-a-nodejs-instance-using-aws-codedeploy

참고. 환경변수가 평소 bash shell을 이용할 때처럼 작동하지 않고 거의 최소한+CodeDeploy 관련한 환경변수만 작동하기 때문에, nvm 설정이 담긴 .bashrc나 .profile을 source해준 뒤 사용해야한다.