3 분 소요

전체적인 흐름

이 글을 참고했다.

원래는 github 올림Jenkins에서 github에 올라와있는 springboot 프로젝트를 가져와서 빌드메인 서버에 .jar 형태로 파일을 전송실행 을 하고 싶다면 다음과 같은 방법을 써야하지만,
나는 springboot 서버를 docker 컨테이너에서 실행할 것이므로 아래과 같은 플로우로 가려고 한다.

github 올림 
→ Jenkins에서 github에 올라와있는 springboot 프로젝트를 가져와서 빌드
→ jenkins 컨테이너에서 자동 빌드 및 docker-compose 명령어로 배포


세팅

아래는 예전에 이미 진행했었기 때문에 빠르게 세팅하고 넘어가자.
이 글에서는 저번에 성공하지 못한 부분부터 진행한다.

1번은 이 글을 참고했다.

2~4번은 이 글을 참고했다.

  1. 우분투 인스턴스 생성 및 swapfile 할당
  2. 도커 엔진 설치
  3. 도커 컴포즈 설치
  4. 젠킨스 설치 (with. docker compose) 및 초기 설정 (Item 생성 및 Git 연동)
  5. 깃허브 설정 (deploy key, webhook, …)


젠킨스 Build Execute Shell

이 글을 참고했다.

#echo "docker hub에 push 하기위해 login"
#sudo docker login -u 도커허브아이디 -p 패스워드

#echo "이미지 빌드"
#sudo docker build --no-cache=true -t ln8847/jenkins-test:1.0 .

#echo "생성된 이미지 확인"
#sudo docker images | grep jenkins-test

#echo "도커허브에 push"
#sudo docker push ln8847/jenkins-test:1.0

echo "기존 컨테이너 삭제"
docker-compose stop

echo "도커 컨테이너 실행"
docker-compose up -d

sleep 5s
docker ps -a

Trouble Shooting

이 글을 참고했다.

스크린샷 2023-02-16 오전 10 31 59

시도1 - docker-compose에 옵션 추가

version: '3'
services:
  jenkins:
    container_name: 'jenkins'
    image: 'jenkins/jenkins:lts'
    restart: always
    ports:
      - 9090:8080
      - 50000:50000
    volumes:
      - /home/ubuntu/docker/jenkins/home:/var/jenkins_home
      - /var/run:/var/run:ro              # docker 실행 폴더 공유
      - /var/run/docker.sock:/var/run/docker.sock # docker 소켓 파일 마운트
    environment:
      TZ: "Asiz/Seoul"

컨테이너 자체를 삭제하지 않고 docker-compose stopdocker-compose up -d 만 해서 그런지는 몰라도 실패했다..

시도2 - jenkins container 접속하여 docker-ce-cli 설치

🚨 주의
아래를 따라 도커와 도커 컴포즈를 설치했는데,
docker-compose stopdocker-compose up -d를 하니 도커와 도커 컴포즈 설치했던게 다 날라간다…
다음부터는 docker-compose start 를 해야겠다!!!

우분투에 접속해서 진행한다.

# jenkins container 접속
$ docker exec -u 0 -it jenkins bash # root 로 접속 (jenkins 는 젠킨스 컨테이너 이름)

# linux 버전 확인
$ cat /etc/issue
# --------------- OS --------------------------------
# root@DESKTOP-R4P59B3:/home/opendocs# cat /etc/issue
# Ubuntu 20.04.4 LTS \n \l
# --------------- jenkins Container OS --------------------------------
# root@DESKTOP-R4P59B3:/home/opendocs# docker exec -it jenkins /bin/bash
# root@8fc963af71bb:/# cat /etc/issue
# Debian GNU/Linux 11 \n \l
 
# Docker 설치
## - Old Version Remove
$ apt-get remove docker docker-engine docker.io containerd runc
## - Setup Repo
$ apt-get update
$ apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/debian/gpg | 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/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

## - Install Docker Engine
$ apt-get update
$ apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# $ apt-get update
# $ apt-get install docker.io

# 버전 확인
$ docker -v

이제 도커 컴포즈를 설치하자

이 글을 참고했다.

버전 확인은 여기에서!

$ apt-get update

# sudo apt install docker-compose 는 구버전
$ curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 버전 확인
$ docker-compose -v


여기까지하고 빌드해보니 에러 메시지가 바뀌었다..!
스크린샷 2023-02-16 오전 10 55 37
우분투 인스턴스에서 젠킨스 컨테이너에 root로 접속해서 진행한다. ($ docker exec -u 0 -it jenkins bash)

이 글을 참고했다.

$ chmod 666 /var/run/docker.sock


다시 빌드해보니 이번엔 이렇게 잘 실행되는 듯 했으나…
스크린샷 2023-02-16 오전 10 59 28

마지막에 이런 에러를 뿜으며 실패했다…
스크린샷 2023-02-16 오전 11 06 14

이번에는 Dockerfile에서 COPY 부분의 문제인 것 같다…
인텔리제이에서 Dockerfile의 내용을 변경해보자.

이 글을 참고했다.

변경 전

FROM openjdk:17-ea-11-jdk-slim
VOLUME /tmp
ARG JAR_FILE=build/libs/jenkins-test-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} jenkins-test.jar
ENTRYPOINT ["java","-jar","/jenkins-test.jar"]
EXPOSE 8080

변경 후

FROM openjdk:11-jdk
#VOLUME /tmp
ARG JAR_FILE=./build/libs/jenkins-test-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
EXPOSE 8080

이대로 git push를 하니 webhook 설정을 해둔 덕분에 젠킨스가 자동으로 빌드했다.
하지만 에러는 그대로였다…

이 글을 보고 .gitignore의 문제임을 알았다.

Dockerfile에서 build/libs/jenkins-test-0.0.1-SNAPSHOT.jarapp.jar 로 COPY 해야하는데 build 디렉토리가 .gitignore에 등록되어있었다.
그래서 build/libs.gitignore에서 제외했다.

변경 전 gitignore

...

build/

...

변경 후 gitignore

...

build/classes
build/generated
build/resources
build/tmp
build/bootJarMainClassName

...

젠킨스를 이용한 자동 배포



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: