AWS ec2에 node.js - jenkins 연동

김예지·2021년 8월 14일
1
post-custom-banner

시작하기 전에

Jenkins 서버 설정

$ sudo apt update
# 자바 설치 (Jenkins 구동을 위해)
$ sudo apt install default-jre
$ sudo apt install default-jdk

# Jenkins 설치
$ cd /tmp && wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
$ echo 'deb https://pkg.jenkins.io/debian-stable binary/' | sudo tee -a /etc/apt/sources.list.d/jenkins.list
$ cd
$ sudo apt update
$ sudo apt install jenkins

# Jenkins 시작
$ sudo systemctl start jenkins.service
$ sudo systemctl enable jenkins.service

# port enable
$ sudo ufw allow 8080
$ sudo ufw allow 22
$ sudo ufw enable
$ sudo ufw status

ec2 보안그룹 설정

IP 접속

http://AWSIP:8080/ 으로 접속 (진짜 IP 입력하라는 뜻임)

화면이 뜨면 성공

비밀번호 확인

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

해당 명령어 입력시 나오는 pw를 위의 Administrator password 창에 입력

Jenkins 설정


그냥 default 값으로 두는걸 추천한다. 이렇게 URL 설정했다가 나중에 다시 원상복구했음.

현재 나의 node app에 test module 추가

라이브러리 인스톨

npm install mocha --save-dev
npm install supertest  --save-dev

test/mock-test.js 파일 생성

const request = require("supertest");
const app = require("../app");

describe("GET /", () => {
  it("Hello, Kangaroo라는 응답이 와야한다.", () => {
    request(app).get("/").expect("Hello, Kangaroo");
  });
});

app.js 하단에 추가

module.exports = app;

test 해보기

./node_modules/.bin/mocha ./test/mock-test.js  

script/test 파일 만들기 (확장자 없음)

#!/bin/sh
./node_modules/.bin/mocha ./test/mock-test.js --exit

test 파일 실행해보기

windows는 git bash에서 한다.

chmod +x script/test
./script/test

내 ec2 서버에 적용해주기

node.js 서버에서 ssh key gen

ssh-keygen -t rsa -b 4096 -C "email@email.com"


맨 밑줄에서 저장된 위치 확인 가능

cat /root/.ssh/id_rsa.pub

저장된 위치에서 cat 명령어를 실행한 후 나온 내용을 복사한다.

github에 ssh 적용

프로필사진 -> settings -> SSH and GPG keys로 간다.

new SSH key를 누른 후 복사해둔 내용을 붙여넣기 해준다.

github에서 SSH로 clone하기


내 프로젝트 code를 SSH로 다운로드 받는 command를 복사.

git clone git@github.com:~~.git

클론 완료.

다시 Jenkins 설정

Jenkins 관리 -> 플러그인 관리


Download now and install after restart 클릭

Jenkins 관리 -> Global tool configuration


우리 프로젝트에서 사용중인 NodeJS 버전 선택 -> save

새로운 Item


credintials에서 github 정보 입력 (private일 경우)

저장 후 빌드 눌러보고 잘 되는지 확인

github webhook 셋팅



github-webhook 뒤에 /를 안붙여주면 에러난다. 붙여주어야함

Jenkins 서버 접속

sudo su - jenkins
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub

여기서 출력되는 결과물을 복사한다.

Node 서버 접속

vi ~/.ssh/authorized_keys

아까 복사해둔 결과물을 맨밑에 추가하고 저장해준다.

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

다시 Jenkins 서버로 돌아간다

ssh ubuntu@NODE.APP.SERVER.IP

여기서 제대로 접속이 되면 완벽. 안되었을 경우 구글에 물어보자.

내 프로젝트에 deploy shell script 추가

/script/deploy 파일 추가 (확장자 없음)

#!/bin/sh
ssh ubuntu@node-server-ip<<EOF
    cd ~/github-folder
    sudo -s	
    git pull origin master
    curl -o-   https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh    | bash
    . ~/.nvm/nvm.sh 
    nvm install 16.3.0	
    npm install
    npm install -g pm2
    pm2 restart app.js
    exit
EOF

해당 스크립트는 내 젠킨스 서버에서 -> 노드 서버로 ssh 접속 후에 git pull을 받아서 pm2를 restart해주는 과정을 담으면 된다.

Jenkins build script 변경

./script/deploy 추가

push하기

deploy 파일 커밋해주기

자동 빌드가 쉽게 완성

솔직히 쉽다고 하면 거짓말

profile
새싹
post-custom-banner

0개의 댓글