이 문서에서는 Jenkins를 사용하여 Docker 이미지를 자동으로 빌드하고 두 대의 Docker 서버에 배포하는 방법을 설명합니다.
-
Maven 프로젝트 생성 Jenkins에서 새로운 Maven 작업을 생성합니다.
-
환경 변수 설정
project_name: 프로젝트 이름과 이후 생성될 Docker 이미지 이름으로 사용됩니다.app_docker_path: Docker 기반 배포를 위한 기본 디렉토리입니다. 각 Docker 서버에 미리 이 디렉토리를 만들어야 합니다.
-
소스 코드 가져오기 설정 Git 저장소에서 소스 코드를 가져올 경로를 지정합니다.
-
Maven 빌드 구성 다음은 예시 Maven 파일 경로입니다:
zkui-master/pom.xml
- 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}"
- 구성 완료 및 서비스 배포 모든 설정이 완료되면 저장하고 Jenkins 작업을 실행하면 됩니다.
이 과정을 통해 Jenkins를 활용해 Docker 이미지를 자동화된 방식으로 빌드하고 배포할 수 있습니다.