젠킨스 + 도커로 스프링부트 배포하기

선형채·2023년 5월 25일
0

출처
AWS 무료 프리티어 만들기 링크 !

배포 방식

먼저 깃허브 마스터 브랜치에 푸쉬하면, 이를 젠킨스가 webhook으로 인식하여 해당 레포지토리를 pull한뒤 이를 그래들을 사용해 빌드합니다.

jar 파일이 완성되면, Docker는 기존 컨테이너를 종료시키고, 컨테이너와 이미지를 삭제한뒤, DokcerFile을 통해 새로운 컨테이너를 생성하여 이를 실행시켜 8080포트에 연결합니다.

보통은 젠킨스를 사용하는 EC2 인스턴스를 하나 더 두어서, 젠킨스와 도커 컨테이너가 돌아가는 인스턴스를 분리하는 방식을 많이 사용합니다. 하지만 프리티어에서는 인스턴스 하나만이 무료로 사용가능하므로 (정확히는 750시간의 사용량이 제공되기 때문에 2개의 인스턴스를 사용하면 사용량이 375시간으로 줄어들게 됩니다.) 하나의 인스턴스를 통해 이 배포과정을 구현해보도록 하겠습니다.

Docker 설치

먼저, EC2에 젠킨스 컨테이너와 서버 컨테이너를 만들어서 하나의 인스턴스로 두개의 인스턴스를 사용하는것 처럼 사용할 것이기 때문에, EC2인스턴스 접속해서 Docker를 설치해주겠습니다.

레포지토리 셋업

아래 명령을 통해서 우분투의 apt의 패키지 인덱스를 최신화하고, apt가 HTTPS를 통해 패키지를 설치할 수 있도록 설정합니다.

$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

도커의 공식 GPG 키 추가

$ 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

도커 설치 확인

$ sudo docker run hello-world

위 명령을 실행하여 위와 같이 Hello from Docker! 메시지가 출력되면 성공적으로 도커 설치가 완료된 것 입니다. 다음 단계로 넘어가볼까요? 🤗

젠킨스 컨테이너 실행

젠킨스 이미지 다운로드

$ sudo docker pull jenkins/jenkins:lts

위 명령을 통해 Jenkins LTS(Long Term Support) 버전의 이미지를 다운로드 받습니다.

젠킨스 컨테이너 띄우기

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

위 명령을 통해 다운로드 받은 젠킨스 이미지를 컨테이너로 띄울 수 있습니다. 사용된 각 옵션을 간단히 알아볼까요?

  • -d : 컨테이너를 데몬으로 띄웁니다.
  • -p 8080:8080 : 컨테이너 외부와 내부 포트를 포워딩합니다. 좌측이 호스트 포트, 우측이 컨테이너 포트입니다.
  • -v /jenkins:/var/jenkins_home : 도커 컨테이너의 데이터는 컨테이너가 종료되면 휘발됩니다. 도커 컨테이너의 데이터를 보존하기 위한 여러 방법이 존재하는데, 그 중 한 방법이 볼륨 마운트입니다. 이 옵션을 사용하여 젠킨스 컨테이너의 /var/jenkins_home 이라는 디렉토리를 호스트의 /jenkins 와 마운트하고 데이터를 보존할 수 있습니다.
  • --name jenkins : 도커 컨테이너의 이름을 설정합니다.
  • -u root : 컨테이너가 실행될 리눅스의 사용자 계정을 root 로 명시합니다.

젠킨스 포트로 접속하기전 aws 설정

아래링크를 통해 설정해주자 !

https://green-joo.tistory.com/18

docker-compose 사용하기

  • 이건 추후에...

젠킨스 설정

도커를 사용하여 젠킨스 컨테이너가 EC2 인스턴스에 성공적으로 띄워졌다면, EC2의 퍼블릭 IP를 통해 외부에서 접속할 수 있을 것 입니다.

$ sudo docker logs jenkins

위 명령을 사용하면, jenkins 컨테이너에 출력된 로그를 확인할 수 있습니다. 젠킨스를 최초로 설치하고 실행하면 사진에서 요구하는 initial admin password를 출력해주는데요, 로그를 확인해봅시다.

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.

Please use the following password to proceed to installation:


XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

위에서 표시된 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 를 웹사이트에 넣어주시면 됩니다.

그 다음 위 화면에서 Install suggested plugins를 클릭하여 추천되는 플러그인을 설치합니다. 그 이후 요구되는 여러 정보의 입력을 끝 마쳐주세요.

profile
JAVA BACK-END DEVELOPER 👩‍💻

0개의 댓글