망각에 재주 있는 나를 위해 기록하는 곳.

[jenkins] ec2 node.js CI/CD 자동 배포 만들기 (3) 본문

jenkins

[jenkins] ec2 node.js CI/CD 자동 배포 만들기 (3)

baobabtree 2024. 2. 17. 01:13
  • 깃허브 페이지로 가서 프로젝트 레포지토리의 Settings로 이동.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*

 

 

Webhooks 선택
내 깃허브 레포지토리에서 어떤 이벤트가 발생하는 것을 알려주게 설정하는 것이다.

 

 

아래와 같이 설정. Payload URL에는 http://<젠킨스서버IP>:8080/github-webhook/를 입력하여 생성.

 

 

  • 젠킨스 서버로 다시 돌아와서 jenkins사용자로 변경하고 ssh발행
sudo su - jenkins
ssh-keygen -t rsa

 

 

그리고 아래를 입력하여 출력된 ssh키를 복사한다.

cat ~/.ssh/id_rsa.pub

 

 

  • node.js서버로 이동. (젠킨스 서버 아님)
    아래를 입력하여 파일을 열어서 방금 복사한 ssh키를 맨 뒤에 이어붙인다.
vim ~/.ssh/authorized_keys

 

.ssh폴더에 권한 부여.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/*

 

  • 다시 젠킨스 서버로 돌아와서 node서버에 접속되면 성공.
ssh ubuntu@<node.js서버ip>

 

  • 프로젝트 파일 설정
    프로젝트 루트 디렉토리에서 script폴더 만들고 deploy파일 생성. (deploy파일은 확장자 없이 만들어야함.)
    2번째 줄은 젠킨스 서버에서 node서버로 접속 할 수 있게 node서버 ip를 입력하면된다. 
    "sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000"는 80포트에서 3000포트로 변환해주는 코드.
    (*자신의 프로젝트에 맞게 설정하면 된다.)

 

  • ecosystem.config.js파일 생성.
    루트 디렉토리에 ecosystem.config.js을 생성하여 설정.

  • 깃허브에 push하고 젠킨스 페이지에서 아래처럼 나오면 성공.

 

 

 

 

 

*쉽지 않게 완성하였지만 페이지에 접속을 하니 들어가지지 않았다.
프로젝트에 .env파일이 있는데 gitignore되어 있어서 clone으로 받아지지 않아 수동 추가 해주었다.

그리고 ec2 node서버에서 보안그룹-인바운드 설정을 안한채로 진행했었다. (22포트만 열린 상태, 80포트를 추가함)

이렇게 처음 CI/CD구성을 하면 자동빌드/배포가 되어도 빠진게 있는지 체크를 잘 해야한다.

 

+ 추후에 배포서버가 늘어나면 늘어난 만큼 젠킨스 서버를 추가 할 필요없이

한 개의 젠킨스 서버에서 "Publish Over SSH"로 관리가 가능한 거 같다.

 

 

 

 

 

 

 

 

 

참고소스:
https://choseongho93.tistory.com/entry/JenKins-%E2%91%A0-%EC%A0%A0%ED%82%A8%EC%8A%A4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-nodejs-CICD-%EC%9E%90%EB%8F%99-%EB%B0%B0%ED%8F%AC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-NestJS

https://velog.io/@yzkim9501/AWS-ec2%EC%97%90-node.js-jenkins-%EC%97%B0%EB%8F%99

https://velog.io/@chang626/Jenkins-%EC%9B%90%EA%B2%A9-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%ACPublish-Over-SSH

AWS ec2에 node.js - jenkins 연동 (velog.io)

Jenkins + Node.js(PM2) + GitHub를 이용한 자동배포 구축하기(1) (velog.io)