Docker & Jenkins 자동배포 하기

jangky000·2021년 1월 8일
0
post-custom-banner

https://github.com/jangky000/docker-jekins-express

아래 문서는 NCP 서버 기본설정 완료를 전제로 함

도커 설치

참고: https://blog.cosmosfarm.com/archives/248/우분투-18-04-도커-docker-설치-방법/

# 현재 사용가능한 메모리 공간을 확인하기
df -h 
/dev/xvda1       48G  4.4G   41G  10% /

# apt 업데이트
sudo apt upadate 

sudo apt install apt-transport-https
sudo apt install ca-certificates
sudo apt install curl # 특정한 웹사이트에서 데이터를 다운 받을 때 사용
sudo apt install software-properties-common

### 도커 설치 과정
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 레포지터리 리스트에 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce # 설치
# 도커 설치 시 자동으로 시스템 서비스로 등록 된다.
sudo systemctl status docker
# 아래 명령어로 도커가 정상적으로 실행 중인지 확인할 수 있다.

프로젝트 최상단에 Dockerfile 생성

  • Node를 위한 Dockerfile 생성하기

https://programmingsummaries.tistory.com/392

https://velog.io/@koozzi/Docker-Node.js로-이미지를-생성하고-컨테이너-실행해보기

FROM node:14.9.0
MAINTAiNER name <email@naver.com>

RUN mkdir -p /temp
WORKDIR /temp/server
ADD . /temp
RUN npm install

ENV NODE_ENV development

EXPOSE 3000 80

CMD ["npm", "start"]

Dockerfile build 예시

# 빌드 태그 이름(이미지 이름): example 
# 현재 경로(.)에서 빌드 수행
# Dockerfile을 찾아서 example 이름으로 build
sudo docker build -t example .

sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
example             latest              289a27587de4        12 seconds ago      158MB
ubuntu              18.04               56def654ec22        7 weeks ago         63.2MB
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB

docker run -p [호스트 서버의 포트]:[컨테이너포트] example
sudo docker run -p 80:80 example

http://공인ip로 접속 확인

Dockerfile Build & Run

sudo docker build -t 생성할이미지/태그명 .
docker run -d -p 3000:3000 생성한이미지/태그명
-d는 데몬

Jenkins 설치

https://velog.io/@wimes/Jenkins를-이용해-Docker프로젝트-빌드해보기 참조

# 도커 컨테이너 종료
sudo docker rm -f `sudo docker ps -a -q`

# sudo docker pull jenkins -> 안 됨
sudo docker pull jenkins/jenkins:lts
  • 젠킨스 컨테이너 안에서 express를 실행할 것이다.
  • 이러한 구조를 docker in docker

Jenkins 실행

# jenkins는 기본적으로 8080 포트를 사용
# 호스트 서버 /home/jenkins와 젠킨스 컨테이너 /var/jenkins_home를 연결(볼륨 마운팅)
# 호스트 서버 /var/run/docker.sock 파일을 젠킨스 컨테이너 /var/run/docker.sock로 연결
# 이 이유는 젠킨스 컨테이너 안에 express 컨테이너를 실행할 것이기 때문
# root 계정으로 jenkins/jenkins 구동
# 이거 안됨 # sudo docker run -d -p 8080:8080 -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins
sudo docker run -d -p 8080:8080 -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -u root [jenkins/jenkins image_id]
sudo docker ps -a

# http://공인ip:8080/ 로 이동
# initialAdminPassword를 입력하는 창이 나온다

# 로그 출력
# sudo docker logs [Jenkins 컨테이너 id] -> 안 나올 시
# initialAdminPassword 확인
sudo docker exec -it [Jenkins 컨테이너 아이디] /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword

# 값을 복사해서 웹에 붙여넣고 continue 클릭

Untitled

왼쪽 클릭 5~10분 정도 소요

Untitled (1)

Jenkins 컨테이너 안에 도커 설치하기

sudo docker ps -a 
sudo docker exec -it [Jenkins 컨테이너 id] /bin/bash

### 도커 설치
curl -fsSLO http://get.docker.com/builds/Linux/x86_64/docker-17.04.0-ce.tgz
tar xzvf docker-17.04.0-ce.tgz

# bin 폴더로 도커의 실행 파일을 이동
mv docker/docker /usr/local/bin
# 용량 줄이기 위해서 기존 압축 파일 제거
rm -r docker docker-17.04.0-ce.tgz

docker login

cd /home
git clone https://github.com/jangky000/docker-jekins-express
# 컨테이너에서 나오기
exit

GitHub Web Hook 설정

참고

https://goddaehee.tistory.com/260

https://goddaehee.tistory.com/258

1.jenkins 설정

jenkins와 github을 연동

  • Jenkins 관리 > 시스템 설정 클릭

https://blog.kakaocdn.net/dn/lsLyF/btqET6Bymv2/29kRoKkXauNq2RgSjply00/img.png

  • 하단으로 이동 하여 Github 관련 설정 > 원하는 Name 지정 > Add 클릭

https://blog.kakaocdn.net/dn/cFW2lm/btqETXSrCTi/xFKhEP2DExTXxjCwWJgvlK/img.png

  • Domain : Global credentials (unrestricted) 선택

  • Kind : Secret text 선택

  • Secret : 위에서 생성한 토큰 입력

  • ID : 본인이 지정하는 식별자(ID) 입력

https://blog.kakaocdn.net/dn/sGbno/btqEUp1UnzG/66wwzVdEAKk6kacTtwfFd1/img.png

  • Test connection 클릭시 정상 연동 확인

https://blog.kakaocdn.net/dn/bGxP5H/btqEVY98sHN/UWpEvitVeTAppDjbJdPEy0/img.png

신규 Item 생성

  • New Item(새로운 Item 클릭)

https://blog.kakaocdn.net/dn/yMG9Y/btqEVJlmJno/5gFScqqKCGJClkPFtqDJpK/img.png

  • 원하는 Project명 입력 > Freestyle project 클릭

https://blog.kakaocdn.net/dn/dtge1i/btqEWswoK1E/yjCRuNVLCy3eo1kGyoCJ5K/img.png

  • General > Github project > Project url > 본인의 github project URL 입력

https://blog.kakaocdn.net/dn/r5l1s/btqEVI7Pcfw/z6ASufIjCmFQZRqtyBsKcK/img.png

  • 소스코드관리 > Git 클릭 > Repository URL 입력 > Credentials (위에서 만든 Credential 선택) > Branch 정보 입력

https://blog.kakaocdn.net/dn/OenXw/btqET6apB0U/K6TPmb1kraKn4MyfTJWQhK/img.png

출처:

https://goddaehee.tistory.com/258

[갓대희의 작은공간]

Jenkins 설정

  • 신규 Item을 생성하거나, 이전 포스팅에서 생성하였던 Github과 연동 되어있는 Item 설정 페이지로 이동.

https://blog.kakaocdn.net/dn/zQDGq/btqFAe6iqac/x4MrHOuvqWaD6kE6reHbKk/img.png

  • 빌드 유발 탭 이동 >> GitHub hook trigger for GITScm polling 체크

https://blog.kakaocdn.net/dn/dIStun/btqFzGvr3kf/KxxA5arhfEVhNZBJrk7vl1/img.png

모든 설정이 완료 되었다면, 이후 설정한 Branch에 Push를 하였을때, 자동으로 jenkins 빌드가 유발되는 것을 볼 수 있다.

출처:

https://goddaehee.tistory.com/260

[갓대희의 작은공간]

profile
예비 웹 FE 개발자
post-custom-banner

0개의 댓글