본문 바로가기

[DevOps]/[CI&CD]

[AWS EC2 + Docker + Jenkins ] Spring Boot 배포 자동화 - Jenkins 설치

728x90

[ 시작하며.. ]

  언제 한번 쭉 정리할까 고민이였는데, 마침 배포 자동화를 할 일이 생겨서 기록으로 남기기로 한다. 한번 해보고 나면 과정은 그렇게 어렵지 않다. PC와 깃헙(혹은 깃랩 등)에서 작업한 내용을, jenkins에서 빌드하고 docker hub에 올리면, server는 그걸 가져와서 실행한다. 

  나는 조금 기형적으로, 배포가 되는 서버와 jenkins용 서버가 통합되어 있다. 정상적인 형태는 아니지만 환경이 열악해서... 혹시나 이 기록을 참고하는 사람들은 참고하면 좋겠다. 더불어 사용하는 EC2 인스턴스의 Ram은 16GB이며, 인스턴스 내부의 인바운드 규칙을 포함한 방화벽은 그때그때 열어주기 바란다. 

원래 간략한 과정은 이렇다. -> 이 중에서 필요한 부분만을 사용하면 된다!
1. Jenkins EC2 인스턴스 생성
2. Jenkins,docker,git 설치
3.  서버간 key 생성
4. App EC2 인스턴스 생성 -> docker, docker daemon
5. Jenkins에 App server 등록
6. Jenkins에 SSH plugin 설치
7. Jenkins에 Item 생성

[ 구축 과정 ]

1. Jenkins EC2 인스턴스 생성(생략)
2. Jenkins,docker,git 설치

일단 현재 멋진 인스턴스에서 배포를 하던 중이라 기본적인 JDK(Jenkins를 설치할 때도 필요)나 깃 등은 설치되어 있다. 따라서 바로 Jenkins 를 설치해 준다. local/jenkins 폴더에다가 설치한다.

 

Jenkins download and deployment

Jenkins download and deployment The Jenkins project produces two release lines: Stable (LTS) and regular (Weekly). Depending on your organization's needs, one may be preferred over the other. See the links below for more information and recommendations abo

www.jenkins.io

그다음 위 링크에서 jenkins download url을 복사해서 wget으로 리눅스 컨테이너 안으로 받아온다. 그리고 실행해 주자.

wget https://get.jenkins.io/war-stable/2.289.2/jenkins.war
java -jar jenkins.war

그런데..

  나는 사용중인 JDK 버전이 14라 jenkins를 지원하지 않는다(Jenkins는 2021.7.27기준 jdk 8, 11을 지원한다) 그래서 docker로 설치하기로 했다. 먼저 docker를 설치하고 docker daemon을 실행해 두어야 되데, 나는 이미 쓰고 있어서 실행중인 것을 확인할 수 있다.

ps -ef | grep docker

먼저 Jenkins 이미지를 받는다.

sudo docker pull jenkins/jenkins:lts

그리고 현재 유저를 확인하고, 도커그룹에 추가한다.

# 현재 유저 확인
echo $USER

# 현재 유저 출력결과
ec2-user

# docker 그룹에 현재 유저 추가
sudo usermod -aG docker $USER

# docker 재실행
sudo service docker restart

이어서 jenkins 이미지를 컨테이너로 띄워준다.

# -d	detached mode 흔히 말하는 백그라운드 모드
# -p	호스트(앞)와 컨테이너(뒤)의 포트를 연결 (포트포워딩) 로컬 PORT: 컨테이너 PORT
# -v	호스트(앞)와 컨테이너(뒤)의 디렉토리를 연결 (마운트)
# -u 실행할 사용자 지정

docker run -d -p 9090:8080 -v /jenkins:/var/jenkins_home --name jenkins -u root jenkins/jenkins:lts

이후 jenkins를 init 하기 위한 패스워드를 반환받는다

# docker의 jenkins 컨테이너로 접속하여 패스워드 파일 읽기
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

 

그리고 hostip:9090으로 접속하면 다음과 같이 젠킨스 화면을 볼 수 있다.

이어서 install -> suggested plugins를 설치해준다.

설치가 끝나면 계정을 설정하고 사용을 시작하면 된다! -> 여기까지 Jenkins Ec2에 docker로 설치

3.  서버간 key 생성(생략)
4. App EC2 인스턴스 생성 -> docker, docker daemon(생략)

5. Jenkins에 App server 등록
6. Jenkins에 SSH plugin 설치

젠킨스 관리 -> 플러그인 매니저 -> 설치가능 목록에 Publish Over SSH 설치

728x90

'[DevOps] > [CI&CD]' 카테고리의 다른 글

[AWS EC2 + Docker + Jenkins ] FastAPI 배포 자동화  (0) 2021.09.12