Jenkins 를 이용하여 Docker 에 Build 하기에 이어서,
https://helloahram.tistory.com/186
CI/CD via Jenkins + Docker #2
Jenkins 설정 Jenkins 를 설치하고 Git Repo 까지 연결했으니 (#1 참고) 이제 설정할 차례 -각오는 했지만 생각보다 설정할 내용들이 많았고 제법 어렵기도 했다 Jenkins 배포 전략 세우기방안1) 빌드 서
helloahram.tistory.com
Docker 에 Image 가 올라가는 것까지만 봤는데, 다시 확인해 보니 실행하자마자 종료되고 있었다
Exited (0) X minutes ago
그래서 Pipeline 을 다시 손 봤다
일단 Directory 생성하는 Stage 는 필요 없어 보여서 삭제하고
Docker_Path 도 Pipeline 내에서 제대로 사용되지 않아서 Git_Repo_Name 으로 다시 변경했다
그리고 8090 Port 를 사용하고 싶었는데 NGINX 내부까지 수정할 시간이 없어서
NGINX 내부는 80, 외부에는 8090 을 사용할 수 있도록
EC2 Instance 에 Inbound 8090 을 추가했다
참고로 Test 용 Git Repo 에 Dockerfile 이랑 Index.html 도 등록했다 🐣 원래 걍 Python print("Hello") 만 올렸었음ㅎ 🐣
# Dockerfile
# 기본 이미지로 nginx 사용
FROM nginx:alpine
# 로컬에서 사용할 파일을 컨테이너의 /usr/share/nginx/html로 복사
COPY ./index.html /usr/share/nginx/html/index.html
# 포트 80 오픈
EXPOSE 80
/* index.html */
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jenkins Docker Test</title>
</head>
<body>
<h1>Jenkins Docker Build Test</h1>
</body>
</html>
그리고 다시 완성한 Pipeline 🐣
환경 변수 (Environment) 만 수정하면 다른 Stage 안의 내용을 건드리지 않고 Build 가 가능하도록 수정했다
pipeline {
agent any
environment {
DOCKER_IMAGE_NAME = 'jenkins-test3-image'
DOCKER_IMAGE_TAG = 'ahram'
CONTAINER_NAME = 'jenkins-test3-container'
DOCKER_PATH = 'Jenkins_Test3'
GIT_REPO_NAME = 'Jenkins_Test3'
GIT_REPO = 'https://github.com/helloahram/Jenkins_Test3.git'
REMOTE_HOST = '10.0.128.64' // EC2 IP 주소
REMOTE_USER = 'ec2-user' // EC2 사용자 이름
SSH_KEY_PATH = '/home/ec2-user/JenkinsKey.pem' // Jenkins 에서 사용하는 SSH 키 경로
DOCKER_USERNAME = '[DOCKER_ID]' // 자격 증명 ID
DOCKER_PASSWORD = '[DOCKER_PW]' // 자격 증명 PW
}
stages {
stage('Clone Git Repository') {
steps {
script {
// Git 저장소에서 코드 클론 (main 브랜치로 명시적으로 체크아웃)
sh 'rm -rf ${GIT_REPO_NAME}'
sh 'git clone --branch main ${GIT_REPO}'
}
}
}
stage('Build Docker Image') {
steps {
script {
// Docker 이미지 빌드
// docker build -t [Image name]:[Tag] [Dockerfile Path]
sh 'docker build -t ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} ${DOCKER_PATH}/'
}
}
}
stage('Docker Login') {
steps {
script {
// Docker Hub 로그인
sh 'echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin'
}
}
}
stage('Push Docker Image') {
steps {
script {
// Docker 이미지를 Docker Hub 에 푸시
sh 'docker tag ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} haru2/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}'
// 도커 이미지를 Docker Hub 나 다른 레지스트리에 푸시
sh 'docker push haru2/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}'
}
}
}
stage('Deploy to EC2') {
steps {
script {
// EC2에 Docker 이미지 배포 및 컨테이너 실행
sh '''
docker pull haru2/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}
docker stop ${CONTAINER_NAME} || true
docker rm ${CONTAINER_NAME} || true
docker run -d --name ${CONTAINER_NAME} -p 8090:80 ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}
'''
}
}
}
}
}
Port 도 8090:80 으로, Command 도 docker-entrypoint 로 잘 들어가는 것을 확인했다
curl http://localhost:8090 도, 내가 Git Repo 에 올린 Index.html 이 응답으로 잘 오고 있다
🐣 서버가 요청을 처리할 수 없을 때는 curl: (56) Recv failure: Connection reset by peer 응답이 출력된다 🐣
8090 Port 로 접근 가능하도록 Local Forwarding 해 준 다음에는, localhost:8090 도 잘 접속된다 🐣
팀원들에게 공유가 필요한 내용
Jenkins 로 Build 와 Deploy 는 구축해 놓았고이제 Test Stage 를 추가해야 합니다
이번 주는 Jenkins 여기까지만 하고, MVP 진행하도록 하겠습니다
'TIL > DOCKER' 카테고리의 다른 글
[AWS] 탄력적 IP 연결 (0) | 2025.01.11 |
---|---|
[Docker] Docker Image Build (0) | 2025.01.04 |
CI/CD via Jenkins #2 (0) | 2024.12.23 |
CI/CD via Jenkins + Docker #1 (1) | 2024.12.22 |
쿠버네티스 Kubernetes (0) | 2024.12.17 |