Docker/Jenkins로 웹서버 자동 배포

Soohyeon B·2022년 11월 16일
0

Chevita

목록 보기
2/3

ec2 안에 jenkins 사용환경 구축하기

이 글은 아래 링크를 참고하여 작성되었습니다.
https://junghwanta.tistory.com/44
👇🏻다른 버전의 환경설정 구성 보러가기
https://www.dongyeon1201.kr/9026133b-31be-4b58-bcc7-49abbe893044#16b69935-c97e-4d90-aab1-c61107f15ac3

ec2 에 jenkins 설치

공식 홈페이지에서 제동하는 설치 가이드라인이다.
https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos

  1. jenkins 설치
# 젠킨스 stable 버전 설치파일 다운로드
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

# 젠킨스 설치 key import
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# 젠킨스 패키지 설치
sudo yum install jenkins -y

# 젠킨스 설치확인
rpm -qa | grep jenkins
  1. jenkins 실행
sudo systemctl start jenkins

실행 오류 발생

해결 법

sudo yum update
sudo systemctl enable jenkins
sudo systemctl start jenkins
#jenkins 상태 확인
sudo systemctl status jenkins

active 상태로 나오면 잘 돌아가는 것이다.

jenkins 초기 설정

  1. Jenkins에 접속
    http://xxxxxxxxxx:8080/
  2. 초기 pw 화면에 입력
#초기 비밀번호 찾기
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

출력되는 비밀번호를 붙여넣는다.

  1. 추천 플러그인 설치 (왼쪽 파란색 박스)
  2. 초기 유저 등록
  3. 인스턴스 접속주소 등록

Jenkins와 Docker를 활용한 빌드 & 배포

스프링 부트로 작성한 프로젝트를 jenkins와 docker를 활용하여 이미지를 생성하고 그 이미지를 기반으로 ec2에 자동 배포할 예정이다.

Docker란?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순화해준다. 어떤 프로그램도 컨테이너로 추상화할 수 있고 어디에서든 실행할 수 있다.

컨테이너
컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다. 가상화 기술의 일종이지만 기존 방식과는 차이가 있다고 한다.

기존의 가상화 방식은 주로 os를 가상화했다. vmware나 virtual box와 같은 가상머신은 호스트 os 위에 게스트 os 전체를 가상화하여 사용하는 방식이다.
이 방식은 여러가지 os를 가상화 할 수 있고 비교적 사용법이 간단하다는 장점이 있지만 무겁고 느려서 운영환경에선 사용할 수 없다.

이를 개선하기 위해 프로세스를 격리하는 방식이 등장했다.

리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다.

이미지

이미지는 컨테이너 실행에 필요한 파일과 설정 값 등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.
컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.

이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 보따리보따리 설치할 필요가 없다고 한다. 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성하기만 하면 된다. 한 서버에 여러개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버도 문제없다!

도커 이미지는 docker hub에 등록하거나 docker registry 저장소를 직접 만들어 관리할 수 있다. 누구나 쉽게 이미지를 만들고 배포할 수 있다.

이미지는 url 방식으로 관리하며 태그를 붙일 수 있다.

Docker file
도커는 이미지를 만들기 위해 dockerfile이라는 파일에 자체 dsl언어를 이용하여 이미지 생성과정을 적는다. 서버에 어떤 프로그램을 설치하려고 이것저것 의존성 패키지를 설치하고 설정파일을 만들었었던 과정을 다른 매체가 아닌 Dockerfile 하나로 관리할 수 있다. 이 파일은 소스와 함께 버전 관리되고, 누구나 이미지 생성과정을 보고 수정할 수 있다.

Docker file 작성

프로젝트 루트에 Dockerfile이라는 이름으로 파일을 생성하고 다음 내용을 적는다.
여기에서 프로젝트 루트라는게 뭔지 헷갈린다.
1. ec2 서버의 프로젝트 루트인지
2. spring boot 프로젝트의 root 인지..

일단 두 곳 모두에 작성했다.

#base로 사용할 이미지 이름
FROM java:11

#Docker file작성자
LABEL maintainer="susu19@ewhain.net"
VOLUME /tmp
#8080 포트로 접근 가능하게 열기
EXPOSE 8080
ARG JAR_FILE=target/kbsc-0.0.1-SNAPSHOT.jar
ADD ${JAR_FILE} chevita.jar

#컨테이너를 구동할 때 실행할 명령어를 지정
# Entry point: 해당 이미지로 컨테이너 실행시, 무조건 해당 명령어 실행
ENTRYPOINT["java", "-jar", "/chevita.jar"]

1. ec2에 docker설치

현재 아마존 linux 서버(Amazon Linux 2 AMI)를 사용하고 있기 때문에 amazon에서 지원하는 방식으로 설치를 진행해야 한다.

공식홈페이지 안내서

#패키지 및 패키지 캐시 업데이트
sudo yum update -y
#최신 Docker engine 패키지 설치
sudo amazon-linux-extras install docker

#Docker 서비스 시작
sudo service docker start

#시스템이 재부팅될 때마다 Docker 대몬이 시작되도록 설정
sudo systemctl enable docker

#docker 그룹에 ec2-user를 추가
sudo usermod -a -G docker ec2-user

#sudo 없이도 Docker 명령을 실행할 수 있는지 확인
docker info

#로그아웃 및 로그인
sudo usermod -aG docker $USER
newgrp docker

설치 확인하기

docker version


client와 server 정보가 정상적으로 출력되었다면 설치가 잘 된거다.

도커 관련 명령어가 익숙지 않다면... 아래 링크로 👇🏻👇🏻👇🏻
https://www.dongyeon1201.kr/c20f7d07-6f23-4134-ae8e-e730dc7b5af6#2a102940-c4a5-4bf7-af16-3ea85c9ddf72
엄청 잘 정리되어있다.

2. Jenkins 환경설정

https://junghwanta.tistory.com/44
jenkins와 git을 연동하여 master branch로 push된 소스코드를 자동으로 빌드하고 배포할 예정이다.

1. gralde, post build task plugin 설치

spring boot 배포 빌드 환경을 위해서는 플러그인 설치가 필요하다.
jenkins 관리 > 하단의 플러그인 관리

gralde 플러그인 설치
Gradle Plugin은 gradle 빌드를 위한 플러그인이다.

jenkins 버전에 따라서 이미 설치가 되어있을수도 있기 때문에 "설치 가능한 플러그인 목록"에서 확인이 안된다면 "설치된 플러그인 목록"에서 확인해보자.

post build task plugin 설치
빌드 로그를 판단하여 script 혹은 shell을 실행할 수 있게 하는 플러그인이다.

2. 새로운 프로젝트 생성

홈 > 새로운 item > 아이템 이름 입력 및 "Freestyle project" 클릭 후 ok 클릭

3. 빌드 관련 설정

  • General > Github project > Project url 에 github 주소 입력

  • 소스코드 관리 > git > Repository url에 동일하게 github 주소 입력

  • credentials > add > jenkins
    kind : username with password
    username : 깃유저 네임
    password: 설정

  • 빌드 유발 > github hook trigger fot GITScm polling

  • Build steps > Invoke Gradle script
    tasks에 bootJar 적기

  • 빌드 후 조치 > Post Build Task 선택 > 스크립트 작성

Log text : BUILD SUCCESSFUL
Operation: --AND--
script: 
nohub java -jar /var/lib/jenkins/workspace/<프로젝트 이름>/build/libs/<jar 파일이름>&

프로젝트 이름: chevita_Backend
jar 파일이름: chevita.jar

작성을 완료하면 Apply 및 저장

4. 빌드 테스트

프로젝트 메뉴 > build now
빌드 오류 발생

빌드 완료 후 Docker Image 생성 설정

원격 배포하기

참고

Jenkins를 활용한 빌드 & 배포

profile
하루하루 성장하는 BE 개발자

0개의 댓글