Jenkins를 사용하여 Docker 이미지 빌드 및 배포

이 문서에서는 Jenkins를 사용하여 Docker 이미지를 자동으로 빌드하고 두 대의 Docker 서버에 배포하는 방법을 설명합니다.

  1. Maven 프로젝트 생성 Jenkins에서 새로운 Maven 작업을 생성합니다.

  2. 환경 변수 설정

  • project_name: 프로젝트 이름과 이후 생성될 Docker 이미지 이름으로 사용됩니다.
  • app_docker_path: Docker 기반 배포를 위한 기본 디렉토리입니다. 각 Docker 서버에 미리 이 디렉토리를 만들어야 합니다.
  1. 소스 코드 가져오기 설정 Git 저장소에서 소스 코드를 가져올 경로를 지정합니다.

  2. Maven 빌드 구성 다음은 예시 Maven 파일 경로입니다:

zkui-master/pom.xml
  1. SSH 전송 및 명령 추가 두 개의 Docker 서버에 대해 SSH 설정을 추가합니다.

첫 번째 전송 구성: 기존 임시 디렉토리 삭제 다음 스크립트는 Jenkins 서버에서 실행됩니다:

#!/bin/bash
ROOT_PATH="/${app_docker_path}"
PROJECT_DIR="${ROOT_PATH}/${project_name}"

# 임시 디렉토리 삭제 및 재생성
rm -rf "${PROJECT_DIR}" && mkdir -p "${PROJECT_DIR}"

두 번째 전송 구성: Dockerfile 복사 Jenkins에서 생성된 Dockerfile을 서버로 전송합니다:

${project_name}/docker/Dockerfile
${project_name}/docker/
/${app_docker_path}/${project_name}

Dockerfile 내용 예시:

FROM 192.168.88.85:5000/jdk8:v1
MAINTAINER Miguel Garcia Puyol <miguelpuyol@gmail.com>

RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
WORKDIR /var/app

ADD zkui-2.0-SNAPSHOT-jar-with-dependencies.jar /var/app/zkui.jar
EXPOSE 9091

ENTRYPOINT ["java", "-jar", "/var/app/zkui.jar"]

세 번째 전송 구성: JAR 파일 복사 빌드된 JAR 파일을 서버로 전송합니다:

${project_name}/target/*.jar
${project_name}/target/
/${app_docker_path}/${project_name}

네 번째 전송 구성: 이미지 관리 및 실행 기존 컨테이너와 이미지를 제거한 후 새로운 이미지를 빌드하고 실행합니다:

#!/bin/bash

IMAGE_ID=$(docker images | grep -i "${project_name}" | awk '{print $3}')
CONTAINER_ID=$(docker ps -a | grep -i "${project_name}" | awk '{print $1}')

if [ ! -z "$CONTAINER_ID" ]; then
    docker rm -f "$CONTAINER_ID"
    echo "컨테이너 종료: ID=${CONTAINER_ID}"
fi

if [ ! -z "$IMAGE_ID" ]; then
    docker rmi -f "$IMAGE_ID"
    echo "이미지 삭제: ID=${IMAGE_ID}"
fi

cd "/${app_docker_path}/${project_name}"
docker build -t "${project_name}" .

# 컨테이너 실행 (외부 네트워크 연결 필요 시 --net=host 추가)
docker run -d -p 9091:9091 --name "${project_name}" "${project_name}"
  1. 구성 완료 및 서비스 배포 모든 설정이 완료되면 저장하고 Jenkins 작업을 실행하면 됩니다.

이 과정을 통해 Jenkins를 활용해 Docker 이미지를 자동화된 방식으로 빌드하고 배포할 수 있습니다.

태그: Jenkins docker maven

7월 18일 05:05에 게시됨