슬기로운 개발자생활/DevOps
Docker, Jenkins 활용 CI/CD 구축 (React, Kotlin+Spring) 1편 - Jenkins 서버 설정
개발자 소신
2024. 1. 4. 20:53
반응형
SSAFY 프로젝트 진행 중 인프라를 구축하는것에 진심인 친구가 Jenkins, Docker를 활용해 자동배포 시스템을 구축한 것을 보고 CI/CD에 관심이 생겼다. CI/CD는 내용이 많기 때문에 3편 정도로 나누어서 진행할 예정이고, Jenkins pipeline를 활용하면 설정이 편해지지만, 각각의 구성요소를 확인해보기 위해 직접 한땀한땀 구현할 것이다.
CI/CD
Continuous Integration(CI) and Continuous Deployment(CD)를 통칭해 이르는 말로 지속적인 통합(소스코드 빌드/테스트 자동화)과 지속적인 배포(무중단 서비스 제공)을 의미한다.
순서
0. 전체 흐름
1. 준비사항
2. Docker, Jenkins 설치
3. Jenkins 설정
4. Trouble Shooting
0. 전체 흐름
- 이번 프로젝트에서 구축한 CI/CD의 아키텍처이다.
- (우측 하단) 깃허브에서 배포 브랜치에 webhook을 걸어놓고 git push, merge request 이벤트가 발생하면 Jenkins에서 빌드/테스트, 배포를 진행한다.
- (위쪽 화살표) React의 경우 빌드/테스트가 끝나면 build폴더가 나오기 때문에 해당 폴더를 웹서버에 옮겨주었다. (도커화가 불필요)
- (왼쪽 화살표) 코프링의 경우 Dockerfile에서 빌드/테스트가 이뤄지고 Docker 이미지를 docker hub에 업로드, 웹서버에서 docker-compose 파일을 통해 이미지를 pull받고 container를 생성한다.
- 웹서버에는 기본적으로 Nginx가 돌아가고 있는 상태, frontend연결하고 /api로 시작할 경우 백엔드로 전달하는 proxy_pass 설정
1. 준비사항
서버
- 젠킨스를 돌려놓을 서버를 하나 준비한다.
- Jenkins를 사용하는 데에는 1cpu, 1gb ram으로 충분하지만, 여유를 두기 위해 2cpu, 4gb ram 서버에서 진행하였다.
- 또한, 배포를 진행할 웹서버도 필요하다. Jenkins 서버에서 웹서버를 같이 띄우는 경우는 거의 없으므로..?
2. Docker, Jenkins 설치
- Docker 설치 (Docker 공식 홈페이지 Install on Ubuntu)
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
※ 여기서부터 AWS는 Docker사용할 때 sudo를 붙여줌
- 도커 설치 완료 여부 테스트
docker run hello-world
- Jenkins 설치 (Docker Image)
docker pull jenkins/jenkins:lts
# 설치된 도커 이미지 확인
docker images
- Jenkins container 실행
docker run -d -p 8181:8080 -v /jenkins:/var/jenkins_home --name jm_jenkins -u root jenkins/jenkins:lts
- -d: 백그라운드 실행
- 8181포트로 접속시 컨테이너 내부 8080포트로 연결
- -v: 디스크에 데이터 저장 (container 날라가도 데이터 복구 가능 -> 버전 변경가능)
- --name: conatiner 이름 설정
- -u: 사용자 계정 이름 설정
- 이미지이름, 버전
여기까지 진행하면 Jenkins container 띄우는 것 까지는 성공이다.
확인 명령어는 docker ps -a
이후 서버 접속 시 아래와 같은 화면이 뜬다 ! 8181 포트 열어줘야함.
3. Jenkins 설정
- 다음의 화면에서 관리자 비밀번호를 입력해야한다.
docker logs [container_id]
를 통해 쉽게 확인 가능
- Install Suggested Plugin 권장설정으로 설치한다.
설치가 되고 있는 화면
- Jenkins 관리자 계정 설정
- URL 설정하고 설정 Finish
4. Trouble Shooting
- 위에서도 적었지만, permission denied 에러가 날 경우 sudo를 붙여서 명령어 실행
- no matching entries in passwd file
AWS에서 설정할 때 발생한 문제인데, 유저명이 서버 유저명을 따라가는 줄 알고 ubuntu를 넣었는데 컨테이너만 생성되고 실행은 안됐다. root로 바꾸니 정상적으로 실행됨
이어서 계속
댓글 질문 환영
반응형