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

ButterFlakes·2022년 5월 15일
0
post-thumbnail

지금까진 그냥 깃허브에 푸시하면 젠킨스가 자동으로 작동하도록 하는 과정을 구성했다 이제 실제로 깃허브에서 코드를 pull하고 자동으로 변경된 소스코드로 서버가 작동하도록 만들어 보자

자동배포 구성 사전준비

Node.js 기반 서버를 배포하는 방식에는 여러가지가 있지만 이 포스팅에선 가장 널리쓰이는 툴 중 하나인 PM2를 이용할 것이다.

PM2 설치하기

PM2를 설치하는 방법은 간단하다. 아래의 스크립트를 터미널에 입력하면 끝이다.

npm install -g pm2 # 둘 중 자신이 쓰는 패키지 관리자에 맞는 것을 쓰면 된다.
sudo yarn global add pm2

다 설치되면 터미널의 아래 명령어를 입력해보자

pm2 -v


이런 식으로 pm2의 로고와 함께 버전이 뜨면 설치가 완료된 것이다

자동 업데이트 스크립트 구성하기

먼저 자동배포를 구성하기에 앞서 젠킨스에 의해 실행될 스크립트를 먼저 작성해놓자

이 스크립트 파일은 깃허브에서 클론한 리포지토리 폴더 내부에 작성해주자. vim 등 텍스트 편집기를 이용해서 작성하면 된다

#!/bin/bash
git pull
sudo yarn or npm install # yarn이나 npm 둘 다 하나만
pm2 restart main

다 작성했다면 update.sh라는 이름으로 저장해주고 아래의 명령어를 통해 실행할 수 있는 명령으로 바꿔주자

chmod 755 update.sh

터미널에서 update.sh가 문제없이 실행된다면 다음 단계로 넘어가자

아래의 스크립트 파일은 젠킨스의 구성에서 쉘 스크립트를 작성했던 부분에 작성해주자

#!/bin/sh
ssh -tt 배포서버의 사용자명@배포서버의 주소 <<EOF
    cd [리포지토리 폴더]
    ./update.sh
    exit
EOF

젠킨스의 구성에서 해당 스크립트를 작성해주어야 한다는 것에 주의

배포서버 설정하기

Jenkins 서버의 ssh 설정

우리가 만드는 자동배포 프로세스는 젠킨스 서버에서 배포서버에 접속하여 업데이트를 실행하게 만드는 방식이다. 그러므로 젠킨스를 가동중인 서버의 ssh를 설정해야 한다

그러니 젠킨스를 가동 중인 서버에 접속해서 아래의 명령어를 입력하고 jenkins로 사용자를 변경하자

sudo su jenkins
cd
ls

아래와 같이 나오면 성공이다

여기서 ssh 설정을 위해 .ssh 폴더로 이동한 다음 아래의 명령어를 입력해 ssh 키를 생성하자

ssh-keygen -t rsa

이번에도 pub파일로 나온 값을 복사해주어야 한다. 아래의 명령어를 터미널에 입력하고

cat id_rsa.pub

해당 명령어를 쳐서 나온 값을 복사해주자.
단 이번에는 비밀번호를 입력하지 말고 그냥 넘어가자

나온 값을 복사해줬다면 젠킨스를 가동중인 서버에서 로그아웃해도 된다.

배포서버 ssh 설정하기

이제 배포용 프로그램이 돌아가는 서버에 접속해서 ssh 설정을 위해 .ssh 폴더로 이동해주자

cd ~/.ssh

이 폴더 내부에는 authorized_keys라는 파일이 있을 수도 없을 수도 있는데 없어도 상관 없다 아래의 명령어를 터미널에 입력하고 vim을 열자

vim authorized_keys

i 키를 눌러 입력모드로 들어간 다음 복사해온 pub 파일의 값을 붙여넣고 :qw 를 입력해서 저장 후 종료를 한다.

그런 다음 다시 젠킨스를 설치한 서버로 돌아가서 ssh를 통해 배포서버로 접속해보자. 접속할 수 있다면 성공이다.

최종 테스트

그럼 이제 pm2에 미리 Node.js 서버파일을 실행시켜 놓자

pm2 start [메인 진입점이 되는 js파일] # 일반 실행
pm2 start [메인 진입점이 되는 js파일] -i 0 # 클러스터 모드 실행

젠킨스를 통해 빌드 테스트를 하기 전 아래 명령어를 터미널에 입력해 우리가 작성한 update.sh가 제대로 작동하는지 확인해보자

./update.sh

여기까지도 문제없이 작동한다면 구성한 젠킨스 작업에 가서 buildnow를 눌러 테스트 빌드를 해보자

마지막으로 연동된 리포지토리에 소스코드를 push를 해보고 문제없이 작동하는지 확인하자

문제없이 작동한다면 축하한다 당신은 자동배포 서버를 구축하는데 성공하였다.

0개의 댓글