땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • ㅗ
  • 이것이 리눅스다 with Rocky Linux9
  • D
  • I
  • E

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

[Jenkins] Jenkins로 Springboot 빌드 및 배포하기
DevOps

[Jenkins] Jenkins로 Springboot 빌드 및 배포하기

2023. 1. 26. 16:49

Jenkins 설치

sudo docker run -itd --name jenkins -p 8080:8080 -v /docker/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Seoul -u root jenkins/jenkins:lts

바로 명령어 실행하면 알아서 jenkins/jenkins:lts 버전 받아짐


# 이걸로 하는게 맞는듯?
sudo docker exec -it jenkins bash

sudo docker exec -it jenkins /bin/bash

cat /var/jenkins_home/secrets/initialAdminPassword

 

** 다른 방법으로 젠킨스 설치하고 싶을 떄 

 

Jenkins 설치

# Jenkins을 설치하는 과정에 대해서 알아보자. Jenkins 이란 Jenkins는 Java로 빌드 된 오픈 소스 CI (Continuous Integration) 및 CD (Continuous Delivery) 도구이며, Jenkins는 기본적으로 소프트웨어 프로젝트를 빌드,

may9noy.tistory.com

 

Error : 플러그인 설치 안됨(설치 버전이 낮아서 그럼)

1. 버전 낮아서 그런거니까 lts버전으로 설치해주면 된다

2. 혹은 이미 설치가 되어있어서 그런걸수도 있음

3. 로그보니까 java.net.SocketTimeoutException: connect timed out 라고 되어있는데 구글링해보니까 프록시 설정 문제라고 해서 안되는거 같은데 

4. 진짜 집념으로 Retry 계속함(4시간 걸렸나?) -> 이걸로 해결함

서버 초기화하니까 짱 잘됨 너무 행복하다

 

** Java 삭제(ubuntu)

sudo apt-get remove openjdk*
sudo apt-get autoremove --purge
sudo apt-get audoclean

 

새로운 아이템 - Freestyle project - Git 레포지주소넣기 - 빌드브랜치설정

 

여기까지하면 128 에러뜰텐데 계정설정을 안해서 에러남 => Add 해서 git저장소 계정정보 넣어주면됨(Username, password 2개만)

플러그인에 gitlab이 확실하게 있는지 확인 필요

 

Comment (regex) for triggering a build 아래에 [고급] 클릭

[Gitlab - Settings - Webhooks]에서 방금 새로 만들었던 Secret token이랑 Jenkins URL을 넣어준다

 

Webhooks URL에 아래에 있는 저 주소로 넣어야함, 안하면 403 에러뜸

 

* 혹시 빌드 시간이 한국시간이 아니라면?

사용자 - 계정선택 - 설정 - Timezone 설정

 

근데 push해서 빌드 자동화는 설정했는데 어떤걸 빌드할진 설정을 안해줬잖아?

어떤 jdk나 nodejs를 가지고 프론트나 백을 빌드할껀지 설정을 안했기 때문에 jenkins한테 알려줘야함

 

 

[Jenkins 관리  - Global Tool Configuration]에서 설정함

JAVA_HOME은 Jenkins 서버 내부의 JAVA를 알아야하니까

docker exec -it jenkins bash

로 들어가서

echo $JAVA_HOME

 

git은 이미 플러그인으로 다운을 했을텐데 /usr/bin/git이 고정임

 

 

이 상태로 Build Test를 해보면

FAILURE: Build failed with an exception.

* What went wrong:
Directory '/var/jenkins_home/workspace/auctopus' does not contain a Gradle build.

....

이런 에러가 뜰텐데 '/var/jenkins_home/workspace/auctopus' 로 가보면 그 원인을 알 수 있다.

 

내 레포지터리의 문제는 프론트와 백을 같이 담고 있는데 backend폴더로 들어가야 gradle 관련 빌드를 할 수 있는데 거기로 못들어가서 그렇다

 

그렇다는건 FE(react)는 npm, BE(SpringBoot)는 gradle로 각각 따로 빌드해야되는데 이 설정을 어떻게 할까?

ITEM을 2개 만들고 각각 item 마다 빌드해야하는 폴더를 지정해야함

 

왼쪽과 같은 디렉터리 구조에 대해서 backend 폴더만 build를 해야하니까 경로를 지정함

add build step에서 Invoke Gradle script를 열고

[Invoke Gradle script - advanced - Root Build script]에서 'backend/' 라고 적어줬음

 

 

여기까지가 CI였음================

 

SSH 통신을 이용한 방법

더보기

그럼 CD를 해보자.

 

CD의 원리는 CI를 통해 build 후 .jar(springboot 배포파일)이 jenkins 서버 안에 존재하게 되는데 이 파일을 ssh 통신을 이용해서 우리가 받은 ec2 서버에 보내야한다.

 

그러면 먼저 ec2 서버 접속을 위한 ssh 환경설정을 해야하는데 Publish Over SSH 플러그인이 필수적으로 필요하다

 

플러그인을 정상적으로 설치했다면 [Manage Jenkins - Configure System] 에 들어가 아래로 내리다보면 Publish Over SSH 탭이 있을텐데 여기서 우리가 받은 서버의 설정을 해주면 된다

 

여기서 제일 중요한건 remote directory인데 서버에 들어가자마자 pwd를 하면 /home/ubuntu로 나오니까 이걸로 해주면되고 아래에 key는 우리가 받은 pem파일을 메모장으로 열어서 붙여주고 

 

오른쪽 아래에 Test Configuration을 눌러 Success가 뜨면 성공적으로 연결 됨!

 

Error : 계속 docker: command not found가 뜬다면

sudo docker exec -it jenkins bash

apt-get update && apt-get install -y docker.io

 

 

도커 인 도커 방식을 이용해서 바로 배포 예정, 레포지터리에 DockerFile을 하나 만들어서 인식하게함

FROM openjdk:11-jdk
VOLUME /tmp
EXPOSE 8080
ARG JAR_FILE=build/libs/project-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN apt-get install -y tzdata

 

Error : pull access denied for auctopus/be, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

exec로 내부 들어가서 docker login 명령어를 입력하고 dockerhub 로그인을 해준다 

아니면 image 명령어를 잘못해서 나오는거일수도

 

Execute shell

cd /var/jenkins_home/workspace/auctopus-be/backend

docker images
docker ps -a

docker stop backend
docker rm backend
docker rmi auctopus/be

docker images
docker ps -a

cat Dockerfile

docker build -t auctopus/be .
docker run -p 8081:8081 --name backend auctopus/be

 

 

 

 

 

 

 

 

 

'DevOps' 카테고리의 다른 글

[Jenkins] Jenkins로 SpringBoot/Django/React 배포하기 (ver.2)  (1) 2023.03.22
[AWS] EC2 인스턴스(Ubuntu)에서 Docker 설치  (1) 2023.03.13
[Jenkins] Jenkins로 nginx + react 빌드 및 배포하기  (1) 2023.02.03
[AWS] EC2 Instance에 MariaDB 설정하기  (0) 2023.01.26
AWS에 대해  (0) 2022.12.06
    'DevOps' 카테고리의 다른 글
    • [AWS] EC2 인스턴스(Ubuntu)에서 Docker 설치
    • [Jenkins] Jenkins로 nginx + react 빌드 및 배포하기
    • [AWS] EC2 Instance에 MariaDB 설정하기
    • AWS에 대해
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바