저번 글에 이어서 AWS의 코드 시리즈로 CI/CD를 어떻게 하는지 실습을 진행해보려고 합니다.
(이 글은 AWS의 기본적인 지식을 가졌다는 전제하에 글이 진행되니 읽기 전 참고해주세요)
그냥 별다른 설정 없이 EC2를 시작해줍니다. 용량은 t2.micro로 프리티어가 제공되는 용량을 사용할 거예요.
보안그룹은 22번(ssh 접속) 포트와 3000번(노드 애플리케이션) 포트를 열어줍니다.
이후 아래의 명령어를 터미널에 입력해준다면 서버에 성공적으로 접속할 수 있을 거예요.
$ chmod 400 'pemkey.pem'
$ ssh -i "pemkey.pem" ec2-user@ec2-'public-ip'.ap-northeast-2.compute.amazonaws.com
최근에 진행한 프로젝트에서 사용한 스택인 NestJs를 사용해 간단한 서버 애플리케이션을 구축해보도록 하겠습니다.
NestJs 설치 및 세팅에 관한 내용은 여기를 참고해주시면 좋을 것 같아요.
위의 과정을 진행하기 귀찮다면 필자의 깃허브에서 클론을 받아오시면 됩니다.
$ yum install git
$ https://github.com/NohGaSeong/CICD-Practice.git
// 아래의 과정을 통해 nodejs 14를 설치해줍니다.
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
$ nvm install 14
$ npm -v // npm의 버전을 체크합니다.
$ npm install -g yarn //yarn 을 설치합니다.
$ cd CICD-Practice
$ yarn // 필요한 패키지를 설치합니다.
$ yarn add pm2 -g //pm2 를 설치해줍니다.
$ yarn build // 프로젝트를 빌드합니다.
$ yarn pm2 start dist/main.js //빌드된 프로젝트를 실행합니다.
여기서 사용한 pm2라는 라이브러리를 잘 모르겠다면 여기를 보고 오시면 좋아요.
이런 식으로 서버에 잘 접속되면 애플리케이션 세팅이 끝났습니다. (스크린샷은 로컬호스트지만 이걸 ec2 서버 내에서 하면 됩니다!)
본격적으로 code series를 이용해서 ci/cd를 하기 전에 우선 이 서비스들이 어느 역할을 수행하는지 먼저 알아보도록 하겠습니다.
Code Commit
Code Build
Code Deploy
CodePipeline
구성하고자하는 아키텍처의 흐름은 다음과 같아요.
1. 유저가 깃허브에 코드를 푸쉬
2. codebuild를 통해 CI 진행
3. codeDeploy를 통해 CD 진행
4. 이후 변경사항 확인
이제 실제로 CI/CD를 구성하러 가봅시다.
CodeSeries를 사용해보기 앞서 미리 준비를 해야합니다.
ec2 우클릭 -> 보안 -> IAM 역할 수정을 눌러줍니다.
새 IAM 역할 생성버튼을 눌러주고,
아래의 스크린샷과 같은 것을 선택해주고 다음버튼을 누른 뒤
AWSCodeDeployFullAccess
, AmazonS3FullAccess
권한 정책을 넣어주고 생성.(codedeploy에서 ec2 접근과 s3를 사용하기 떄문) 이후 ec2 와 연결해줍니다.
그럼 EC2 IAM의 세팅은 끝났습니다.
7b76666
같은 영어 숫자가 섞인 텍스트를 클릭해주면 full commit id가 보인다. 그것을 복사, 붙여넣기.환경
아래의 스크린샷과 같이 해주면됩니다. 깊게 들어갈 것 없이 눈에 보이는대로라 딱히 설명할 부분은 없는 것 같습니다.
BuildSpec
version: 0.2
phases:
install:
runtime-versions:
nodejs: 16
commands:
- node -v
- npm -v
pre_build:
commands:
- echo Entered the install phase...
- sudo yarn
build:
commands:
- sudo yarn add pm2 -g
- sudo yarn build
post_build:
commands:
- sudo yarn pm2 kill
- sudo yarn pm2 start dist/main.js --watch -f
이후 생성버튼을 클릭합니다.
손 쉽게 생성해줍시다.
배포 그룹의 이름을 생성, 서비스 역할은 알아서 생성해주는 역할을 사용하면됩니다.
배포 방법은 현재위치, 그리고 우리가 생성했던 ec2를 선택해줍니다.
배포 설정은 CodedeployDefault.AllatOne
으로. (배포 구성을 만들어보고 싶으면 다른 곳들을 참고해서 만들어봐도 좋습니다.) 로드 밸런서는 지금 우리가 사용하고 있지 않기때문에 체크하지 않고 배포그룹을 생성해줍니다.
codedeploy가 CD를 진행하기 위해서 ec2에 codedeployAgent를 설치해줘야합니다. 설치 방법은 아래와같습니다.
$ yum -y update
$ yum install -y ruby //루비 설치
$ wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install //리전에 서울이라면 이렇게 다운.
$ chmod +x ./install
$ sudo ./install auto
$ sudo service codedeploy-agent status //상태확인
$sudo service codedeploy-agent start //서비스시작
service codedeploy-agent status
를 입력했을때 The AWS CodeDeploy agent is running as PID 14890
가 뜨면 성공적으로 실행된 것입니다.
필자의 깃허브를 클론 받았으면 있을텐데 cd 를 어떤식으로 진행해주세요 ~ 를 적어두는 파일입니다. 중복되는 파일로 인한 오류를 방지하기위해 overwrite 옵션을 넣어놨습니다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/CICD-Practice/
overwrite: yes
file_exists_behavior: OVERWRITE
이제 모든 준비가 끝났습니다.파이프라인 생성을 누른 뒤 이름과 새 서비스 역할을 선택해줍니다.
이후 Github와 연동을 하여 리포지토리 이름과 브랜치 이름을 설정해줍니다. 설정해준 리포지토리, 브랜치에서 변동 사항이 일어나면 이 파이프라인이 자동으로 시작될겁니다.
빌드 단계를 추가해주는 단계입니다. codebuild로 빌드를 할 것이기에 codebuild를 선택해주고 만들었던 프로젝트를 선택해주면 됩니다.
배포 단계를 추가해주는 단계입니다.. codedeploy로 배포를 할 것이기에 codedeploy를 선택해주고 만들었던 프로젝트, 배포그룹을 선택해줍니다.
그럼 이제 CI/CD를 위한 과정들이 모두 끝났습니다. 그럼 이제 CI/CD가 잘 되는지 테스트를 해봅시다.
간단한 예제이기에 웹사이트에서 진행했씁니다. 기존 return 값인 hello world
를 cicd/test!!
라는 문자열로 바꿔주고 커밋을 하였습니다.
커밋을 하고 파이프라인에 들어가보면 이렇게 source-build-deploy 과정이 진행되고 있을 것입니다.이제 에러없이 이 모든 과정이 잘 수행되기를 기도하면됩니다.
셋 다 성공. 이제 서버에 들어가 return 값이 잘 바뀌었는지 확인을 해주면 됩니다. (스샷의 파이프라인 실행 ID가 다른 이유는 필자가 이 글을 작성하면서 삽질을 하느라 시도를 여러번해서 그렇습니다..ㅎㅎ)
짠! 그럼 이렇게 변경 사항이 잘 반영된 것을 볼 수 있습니다.
이 코드 series를 처음 써봤을때 굉장히 많은 삽질을 하였는데요..(지금도 원트에 안됨) 또 다시 같은 삽질을 반복하지 않기위해 이렇게라도 사용해봤던 서비스들을 정리하려고해요.
많이 써보지 않은 서비스이고, 백엔드 부분도 깊게 알진 못해서 설명도 난잡하고 부족한 글인데도 끝까지 봐주셔서 감사합니다.
궁금한 부분이나 안되는 부분은 댓글로 질문해주시면 열심히 답변해보겠습니다! 다시 한번 끝까지 읽어주셔서 감사합니다!
넘나 유익한 글입니다👍👍