CD 설계하기 with Jenkins, Docker

sieun·2022년 2월 9일
0
post-thumbnail

개요

프로젝트의 규모가 커질수록 코드 검증과 배포를 자동화해주는 CD가 빛을 발합니다. 특히나 배포한 서버나 작업물이 여러 개일 경우 발생하기 쉬운 실수를 자동화하여 방지할 수 있습니다.

때문에 스케일 아웃으로 서버 성능을 높일 예정이었던 e-commerce 대용량 서버 프로젝트에 CD구축이 필요하다 생각하였고 이 과정을 기록해보고자 합니다.


SSH 설정

SSH URL 등록

프로젝트의 github주소로 들어가 ssh url을 복사하여 Jenkins 소스코드관리에 붙여넣습니다.

젠킨스에 SSH 플러그인 설치

build 및 upload 작업 이후 배포 서버에 SSH 연결을 위한 플러그인SSH 를 설치합니다.


( Publish Over SSH 플러그인은 보안 이슈로 2022년 1월부터 suspend 되어 아래와 같이 진행하였습니다.)

  • Dashboard > Plugin Manager > SSH 검색하여 설치
  • Dashboard > 시스템설정 에서 SSH로 접속할 서버 host와 private key를 등록



젠킨스 서버 설정

젠킨스 서버에 도커 설치

# 도커 설치하기
yum -y update
yum -y install docker docker-registry
  • 도커 서비스 시작하기
    # 도커 서비스 시작하기
    sudo systemctl start docker
    sudo systemctl enable docker
    sudo systemctl status docker 를 입력했을 때 inactive 상태라면 docker service가 실행이 안 된 상태입니다.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock 에러가 발생한 경우,

    sudo chmod 666 /var/run/docker.sock

/var/run/docker.sock 파일의 권한을 666으로 변경하여 그룹 내 다른 사용자도 접근 가능하게 변경하면 해결됩니다.


젠킨스 JDK8 → JDK11 로 변경

  1. JDK11 설치하고 환경변수 설정하기
# 설치가능한 jdk 목록 확인하기
yum list java*jdk-devel

# open jdk 11 설치
yum install java-11-openjdk-devel.x86_64

# javac 설치경로 확인
which javac

# /bin/javac에 연결된 원본파일 위치 확인
readlink -f /bin/javac

# 환경변수 설정하기
vi /etc/profile

# 파일 맨 하단에 아래 문구를 추가한다
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-1.el7_9.x86_64

# 설정 후 명령어 입력
source /etc/profile

# 결과 확인
# /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-1.el7_9.x86_64 가 출력되면 올바르게 설정된 것이다.
echo $JAVA_HOME
  1. Jenkins에 JDK11 등록하기
  • Jenkins 관리Global Tool ConfigurationJDK 에서 아래와 같이 등록

도커 허브 및 서버 준비

도커 허브 저장소 생성

https://hub.docker.com/ 에서 계정을 만들고, create repository 버튼을 눌러 private 레포지터리를 생성한다.

WAS 서버에 도커 설치

# 도커 설치
apt-get install docker.io

# 도커 서비스 구동하기
sudo systemctl start docker

빌드 커맨드 작성

  1. public git repo 에 노출되어서는 안되는 환경 변수가 담긴 application.yml 파일을 끼워넣기
  1. 소스코드를 빌드
  1. 도커 허브의 private 레포지토리에 빌드한 이미지를 푸시
  1. ssh 접속해서 도커 이미지를 다운받고 컨테이너로 구동



프로젝트 구조


후기

도커를 사용한 CD 설계는 처음이었기 때문에 구축 과정을 이해하기가 어려웠습니다. 이 과정에서 Jenkins와 Docker가 얼마나 편리한 툴인지 느낄 수 있었습니다. 하지만 조금 더 자세한 동작 원리를 배우기 위해서 도커를 사용하지 않고 CD를 구축해보는 경험도 좋을 것 같다고 생각하였습니다.



📕 Reference

https://zin0-0.tistory.com/269?category=923002

https://git-scm.com/book/ko/v2/Git-서버-SSH-공개키-만들기

https://junghwanta.tistory.com/45

profile
열심히 공부중입니다😇

0개의 댓글