도커 허브 레포지토리 생성 및 업데이트
도커 허브 사이트로 가서, 로그인 후, 레포지토리를 생성해주겠습니다.
이렇게 myapp이라는 이름으로 도커 허브에 레포지토리를 만들고, 젠킨스로 가서 Build Steps > Execute shell를 추가해줍니다. 거기서 Command에 다음과 같이 입력합니다. Apply & Save를 통해 저장해줍니다.
docker build -t statsdev/reactboard:2.0 .
docker login -u '도커허브 이메일' -p '도커허브 비밀번호' docker.io
docker push statsdev/reactboard:2.0
권한 오류를 방지하고자 jenkins서버에 접속해서, docker.sock 파일의 권한을 조정해줍니다.
chmod 666 /var/run/docker.sock
이제 Jenkins 사이트에서 myApp > 지금 빌드를 누릅니다. 빌드 성공이 뜰 때까지 기다려줍니다.
빌드가 성공하면 도커 허브로 가서 myapp의 상태를 확인합니다. 2.0으로 나타나면 성공한 것입니다.
Jenkins 서버에서 Spring Boot 서버로 접근하기
접근을 위해서는 키(Key)를 만들어줘야 합니다.
jenkins 서버의 홈 디렉토리에서 springboot 폴더를 만들고 해당 경로로 이동한 다음, 컨테이너로 접속합니다.
mkdir springboot
cd springboot/
docker container exec -itu 0 docker-jenkins /bin/bash
컨테이너에서 명령어를 작성하여 키 이름, 비밀번호 공백으로 입력하고 저장할 위치를 지정합니다.
ssh-keygen -t rsa -C "docker-jenkins-key" -m PEM -P "" -f /root/.ssh/docker-jenkins-key
이제 .ssh 폴더 내부를 살펴보면 공개키(.pub)하나와 개인키 하나씩 생성된 것을 알 수 있습니다.
다음 명령어를 통해 개인키와 공개키의 각각 내부를 확인합니다.
#개인키 확인
cat ~/.ssh/docker-jenkins-key
#공개키 확인
cat ~/.ssh/docker-jenkins-key.pub
확인했다면 이 개인키 파일을 복사해서 jenkins_home 디렉토리로 붙여넣습니다. 또한, 해당 경로에서 개인키 파일에 대한 읽기 권한을 아래 명령어를 통해 추가해주겠습니다.
# 키 파일을 복사해서 jenkins_home 넣기
cp ~/.ssh/docker-jenkins-key /var/jenkins_home/
#읽기 권한 추가
chmod +r /var/jenkins_home/docker-jenkins-key
그리고 실제로 잘 들어갔는지 확인합니다.
확인했다면 exit 명령어로 컨테이너를 빠져나오겠습니다.
이제 docker-jenkins 컨테이너에 있는 공개키(.pub)를 현재 경로에 있는 폴더로 복사해서 가져옵니다. 아래 명령어를 사용합니다.
docker cp docker-jenkins:/root/.ssh/docker-jenkins-key.pub ./docker-jenkins-key.pub
Spring boot 서버에서 공개키 붙여넣기
복사가 잘 이루어졌습니다. 이제 터미널 혹은 명령 프롬프트를 하나 더 열어주고, "Spring boot" 서버로 접속합니다. 접속해서 .ssh 폴더를 만들고, 이동해서 authorized_keys에 jenkins 서버의 공개키를 모두 복사해서 붙여넣어줍니다.
mkdir .ssh
cd .ssh
vi authorized_keys
붙여넣을 때는 ssh-rsa부터 docker-jenkins-key까지 모든 부분을 다 복사해서 붙여넣어야 하는 점을 주의합니다. 그리고 :wq로 저장 후 빠져나오겠습니다. 이제 이 공개키를 통해 springboot에서 jenkins 서버로 갈 수 있습니다.
젠킨스 사이트로 돌아와서, Dashboard > 관리 > Plugins > Available plugins 메뉴로 갑니다. 가서 publish로 검색해서 Publish Over SSH를 찾아 Install 체크해줍니다.
그리고 Plugins에서 해당 플러그인이 잘 설치되었는지 확인해주고 메인 페이지로 이동합니다. Jenkins 관리 > System > Publish over SSH 섹션이 만들어졌습니다. 여길 아래와 같이 편집해줍니다.
저장해주고, 아래 SSH Server 섹션에는 springboot 서버 이름을 Name에 표기하고, Hostname에는 해당 springboot 서버의 공인아이피를 입력합니다.
중요한 점은 SSH Server 설정 후에는 Test를 해서 우측 하단 처럼 "Success"가 나타나야 한다는 것입니다. 완료 후에는 Apply & 저장을 눌러서 적용해주시구요.
이제 Springboot 서버에서 접속을 시도하겠습니다. 아래 명령어를 통해 접속하고 myapp 2.0 이미지를 불러와서 실행시키겠습니다.
docker login -u '[도커허브 이메일]' -p '[도커허브 비밀번호]' docker.io
docker pull statsdev/myapp:2.0
docker ps -q --filter name=myapp | grep -q . && docker rm -f $(docker ps -aq --filter name=myapp)
docker run -d --name myapp -p 9090:9090 statsdev/myapp:2.0
추가로 myapp과 도커허브 계정이름은 각자의 것으로 편집해서 넣어주세요.
이 작업이 끝나면 젠킨스에서도 SSH Key, 서버 설정 부분 하단에서 Apply & 저장을 눌러줍니다. 그리고 지금 빌드를 누르겠습니다. 빌드가 완료되면, 해당 파일 하나를 간단히 편집해보고, git push까지 진행해보겠습니다.
빌드가 잘 성공했습니다. 먼저 springboot 공인아이피:9090 으로 웹 사이트에 입력합니다. 게시판 앱에 잘 접속되는 것을 알 수 있습니다.
이때, 파일 하나만 편집해보겠습니다. springboard > reactjs 폴더에 있는 README.md 파일을 하나만 바꿔보고 저장합니다.
그러면 github에 이 수정사항을 push 해줍니다. 젠킨스에서도 git 소스코드 변경사항을 push하면 도커 컨테이너 이미지를 내려받아서 자동으로 빌드하고 배포 후 컨테이너 접속을 합니다.
가 되어야 하는데 에러가 발생합니다. 빌드를 눌러야만 반응하는..것이니 자동이 아니라 수동으로 업데이트가 되는 문제가 발생합니다.
한번 고쳐보고 다시 수정해서 올리겠습니다!!
'네이버 클라우드 캠프 > Spring Boot & React' 카테고리의 다른 글
[Spring Boot & React] 게시판 앱 배포하기(1) (0) | 2023.08.12 |
---|---|
[Spring Boot & React] DB서버를 Object Storage로 변경하기 (0) | 2023.08.11 |
[Jenkins] 젠킨스 설정하기(2) (0) | 2023.08.10 |
[Jenkins] 젠킨스 설정하기(1) (0) | 2023.08.09 |
[Docker] 도커로 앱 배포하기 (2) (0) | 2023.08.09 |