본문 바로가기

Web Dev/Jenkins

Jenkins - Git push 명령어만으로 자동 배포하기(jenkins 이용, none docker)

개요

Jenkins를 이용하여 git push 명령어만으로 자동 배포가 이뤄지게 하는 것이 이 글의 목표입니다.

보안이나 최적화면에서 부족함이 많겠지만 토이 프로젝트를 테스트하는 용도로는 불편함 없이 쓸 수 있을 것 같습니다.

이 글의 예제에서는 Javascript만으로 애플리케이션을 작성하였고 stack은 아래와 같습니다.

  Front-end Back-end
Package manager yarn npm
Library react express

 

0. Aws Ec2 세팅

처음에는 평생 프리티어가 있는 GCP를 이용하려고 하였으나 Jenkins와의 통신이 잘되는가 싶다가도 자꾸 끊기는 이슈가 있었고 오랜 시간에도 해결이 안되어 Aws의 ec2를 사용해보았습니다. 다행히도 ec2에서는 jenkins와 통신이 원활이 이루어져서 본 글에서는 ec2를 사용하였습니다.

 

Aws ec2 세팅은 다른 글을 참고해주세요 :)

 

1. nginx  설치

아래글 참고

tonyw.tistory.com/162

기본적인 nginx 서빙 위치  root   /usr/share/nginx/html

 

(리버스 프록시를 사용할 경우 설정을 꼭 해준다!)

 

2. jenkins 설치

0 - sudo 설정

1) 관리자 권한 설정 파일을 엽니다.

$ sudo vim /etc/sudoers

 

2) 아래 내용을 추가하고 저장합니다.

jenkins ALL=(ALL) NOPASSWD: ALL

 

1 - aws 방화벽에서 8080 포트(또는 사용하고 싶은 포트) 개방

 

2 - jenkins 설치

1) jdk 설치 - jenkins를 java를 기반으로 만들어졌다 합니다.

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk

 

2) apt-get으로 jenkins 설치

$ wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -

$ echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list

$ sudo apt-get update

$ sudo apt-get install jenkins

 

#apt-get 오류시

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv [해당 key입력]

$ sudo apt-get update

$ sudo apt-get install jenkins

아래글 참고

askubuntu.com/questions/1078744/error-while-trying-to-sudo-apt-get-update-gpg-no-sign-repository

 

# port를 변경하려는 경우

- 옆의 파일을 열어서 $ sudo vi /etc/default/jenkins

- HTTP_PORT 에 지정된 포트를 다른 번호로 변경해줍니다. ex) HTTP_PORT=8081

 

3) jenkins 서비스 시작

$ sudo service jenkins start

 

4) 최초 설정

jenkins가 잘 설치되어 실행된다면 admin password 입력창이 뜹니다. 아래의 명령어로 password 값을 가져옵니다.

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

 

그리고 이어서 나오는 추천 플러그인들을 설치하고 관리자 계정을 원하는대로 설정해줍니다.

 

 

3 nodejs plugin 설치

Jenkins plugin에 들어가서 nodejs plugin을 검색하여 설치합니다.

 

4 global tool configuration에서  NODEJS 설정

global npm 에 yarn과 pm2를 추가합니다. 띄어쓰기로 입력합니다. ex) yarn pm2

 

3. Github repository 생성

1 github repo 생성

 

2 Github 프로젝트의 Settings 메뉴로 이동

 

3 Add Webhook 클릭

 

4 내용 입력
  - http://<Jenkins서버 IP>:<port>/github-webhook/
  - application/json 선택
  - Juste the push event 체크

 

4. jenkins 프로젝트 생성

1) item 생성

 

2) github와 연결

- 구성 > 소스 코드 항목으로 이동

 

- Git URI 입력 - [git repo 주소.git]

  주의) git repository 주소 뒤에 .git 을 꼭 써주어야합니다!

 

- [Add] 버튼을 눌러 github의 ID/PW를 입력

 

- 빌드 유발 항목의 [github hook trigger for gitscm polling] 체크

 

 

3) node 설정

- [빌드 환경] - [provide node & npm bin/ folder to PATH] 설정 으로 가서 jenkins 설치 후 global tool configuration 설정한 node를 선택합니다.

 

4) build 설정

Fetch된 repo는

/var/lib/jenkins/workspace/[프로젝트명] 에  루트폴더 없이 repository의 폴더와 파일들이 내려받아진다. 이것을 참고하여 아래의 스크립트를 작성합니다.

 

- [Build] - [Execute shell] 선택

 

# script 설정

echo '**********Github Hook Triggered**********'

export BUILD_ID=dontKillMe

npm --version

cd /var/lib/jenkins/workspace/test/client

yarn install

yarn build

sudo rm -rf   /usr/share/nginx/html

sudo mv build html

sudo mv html /usr/share/nginx/

sudo service nginx restart

cd ..

cd server

npm install

pm2 --version

pm2 status

pm2 kill

pm2 start app.js

echo '**********Done**********'

주의) export BUILD_ID=dontKillMe 가 있어야만 빌드 유발이 끝난뒤에도 pm2가 실행을 멈추지 않습니다!