개발 => 복습 후 재정리 대기/Node.js

[Jenkins] Node.js - Jenkins - Slack 연동

장 상 현 2021. 8. 16.

1. AWS EC2 우분투 20.04 프리티어 생성

 

보안설정

 

 

서버 접속

$ 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

 

 

아래 화면처럼 표시되면 성공

 

2. http://AWS-IP:8080/ 접속 ( AWS-IP : 발급받은 AWS IP 주소)

 

 

 

아래 명령어로 접속한 Jenkins 서버에서 비밀번호 확인 후 위 Administrator password 란에 입력

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

 

3. Jenkins 설정 + 계정생성

 

 

Install suggested plugins

 

 

계정 생성

 

4. 개발중인 Node.js 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;
// 명령어 창에 입력하여 테스트

./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

 

5. Node.js 서버에 적용

 

node.js 서버에서 ssh key gen

ssh-keygen -t rsa -b 4096 -C "깃허브@이메일"

 

 

엔터~y~엔터로 넘기면 아래 화면 출력

 

 

yours public key has been saved in /root/ ~~~ 경로로 가서 아래 구문 실행

cat /root/.ssh/id_rsa.pub

 

 

실행시 나온 내용 복사 후 아래 gitHub 아래 경로대로 접근

 

 

복사한 내용 붙여넣어 생성

 

6. Jenkins 설정

AWS-IP:8080 접속 후 로그인

 

 

Jenkins 관리 -> 플러그인 관리 클릭

 

 

설치가능 탭 -> NodeJS 검색 -> install 체크박스 체크 -> download now and install after restart 클릭

 

 

Jenkins 관리 -> Global Tool Configuration

 

 

Add NodeJs -> Name 작성 -> Save

 

 

새로운 Item 클릭

 

 

Freestyle project -> ok

 

 

소스 코드 관리 -> git 선택 -> git 주소 입력 -> Add 클릭

 

 

credintials에서 github 정보 입력 (private일 경우) & password : 깃에서 발급받은 로그인용 토큰

 

 

빌드 유발 & 빌드 환경 설정

 

 

Add build setp

 

 

Command 입력

 

 

아래 에러시  소스 코드 관리에서 브랜치 변경!

 

 

빌드 실패시? Jenkins 서버에서 npm install

 

7. github webhook 설정

Settings -> Webhooks -> Add webhook

 

 

Payload URL 설정 ( 젠킨스 AWS-IP:8080/github-webhook/ )

 

8. 다시 Jenkins 서버 접속 후 설정

명령어 입력

sudo su - jenkins
ssh-keygen -t rsa

//엔터로 쭉 넘긴 후 나오는
// your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub
// /var ~ 경로로 접속 후

// 아래 명령어 실행
cat ~/.ssh/id_rsa.pub

 

명령어 입력 후 출력되는 결과 복사

 

9. 다시 Node 서버 접속 후 설정

아래 명령어 입력하여 vi 편집기 실행하 + 위에서 복사한 결과 맨 아래에 붙여넣고 저

vi ~/.ssh/authorized_keys

 

 

아래 명령어로 권한 부여

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

 

10. 다시 Jenkins 서버 접속 후 설정

ssh ubuntu@AWS-IP ( node 서버 )

접속이 되었다면? 끝!

 

11. 내 프로젝트에 deploy shell script 추가 + git push

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

 

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

#!/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

 

12. Jenkins build script 변경

./script/deploy 추가

 

13. Slack 연동

workspace 에서 앱 추가 -> 토큰 발급

 

 

 

Jenkins 관리 -> 플러그인 관리 -> Slack Notification 설치

 

 

Jenkins 관리 -> 시스템 설정

 

 

slack workspace, chanel 입력

 

 

Credentials 입력 - Secret 란에 위에서 발급받은 slack 토큰 입력

 

 

빌드 후 조치 -> Slack Notifications -> 전부 선택 후 저장

 

 

추가되면 완료

 

14. 끝. 출처 - 눈부셔서 안 보이는 그분의 블로그

 

 

AWS ec2에 node.js - jenkins 연동

참고 : https://velog.io/@dlawogus/AWS%EC%97%90%EC%84%9C-Jenkins%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-node.js-CICDec2 서버 두개를 사용한다. (node.js

velog.io

댓글