이 글에서는 Jenkins를 활용해 GitHub의 코드 변경을 자동으로 감지하고, Docker 이미지를 빌드해 Docker Hub에 푸시하는 파이프라인 구축 방법을 알아보겠습니다 👀
Jenkins가 GitHub 저장소에 접근할 수 있도록 Personal Access Token(PAT)를 생성합니다.
설정 경로
GitHub → Settings → Developer Settings → Personal Access Tokens → Generate new token (classic)

권한 설정
‼️ 토큰 생성 후 다시 확인할 수 없으니, 반드시 복사해 보관하세요.

Jenkins가 GitHub 저장소에 접근할 수 있도록 자격 증명을 등록합니다.
설정 경로
Jenkins 관리 들어간 후, 아래 이미지를 따라가세요 💫



입력 정보

Jenkins에서 GitHub 및 Docker와의 연동을 위해 다음 플러그인을 설치합니다.
설정 경로
Jenkins 관리 → 플러그인 관리 → Available plugins
설치 플러그인 목록

Jenkins가 Docker Hub에 이미지를 푸시할 수 있도록 Personal Access Token을 발급받아 설정해야 합니다.
발급 방법
Docker Hub 로그인 → Settings → Personal access tokens → Generate new token
‼️ 이것도 토큰 생성 후 다시 확인할 수 없으니, 반드시 복사해 보관하세요.

Docker 이미지 푸시를 위해 Jenkins에 Docker Hub 자격증명을 등록해야 합니다.
설정 경로
GitHub 인증 정보를 등록할 때와 동일한 경로를 따라 설정합니다.
입력값 설정
📌 ID는 젠킨스 파이프라인 스크립트에서 사용되니 기억해두세요!

웹 애플리케이션을 Nginx 기반으로 컨테이너화하는 Dockerfile 예시입니다 ☺️
# Nginx 기반 이미지 사용
FROM nginx:alpine
# 작업 디렉토리 설정
WORKDIR /usr/share/nginx/html
# HTML 파일들을 컨테이너로 복사
COPY *.html ./
# Nginx 설정 파일 복사 (기본 설정 사용)
# 필요시 커스텀 nginx.conf 파일을 추가할 수 있습니다
# 포트 80 노출
EXPOSE 80
# Nginx 시작
CMD ["nginx", "-g", "daemon off;"]
루트 디렉토리에 Jenkinsfile을 작성하여 파이프라인을 정의합니다. 아래는 GitHub 코드 변경 시 도커 이미지를 빌드하고 Docker Hub로 푸시하는 기본 파이프라인 예시입니다.
pipeline {
agent any
environment {
// Docker Hub 레지스트리 정보
REGISTRY = "yukyung0"
IMAGE_NAME = "dtalks-design"
// Jenkins 빌드 번호를 이미지 버전 태그로 사용
IMAGE_TAG = "${env.BUILD_NUMBER}"
// 전체 이미지 경로
FULL_IMAGE = "${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
LATEST_IMAGE = "${REGISTRY}/${IMAGE_NAME}:latest"
}
stages {
stage('Checkout') {
steps {
// Git 저장소 코드 가져오기
checkout scm
}
}
stage('Build Docker Image') {
steps {
// 버전 태그와 latest 태그를 동시에 지정하여 빌드
sh '''
docker build -t $FULL_IMAGE -t $LATEST_IMAGE .
'''
}
}
stage('Push to Docker Registry') {
steps {
// Jenkins에 등록된 Docker Hub 자격 증명 사용
withCredentials([usernamePassword(
credentialsId: 'docker-registry-credentials',
usernameVariable: 'REGISTRY_USER',
passwordVariable: 'REGISTRY_PASS'
)]) {
// 버전 태그 및 latest 태그 모두 push
sh '''
echo "$REGISTRY_PASS" | docker login -u "$REGISTRY_USER" --password-stdin
docker push $FULL_IMAGE
docker push $LATEST_IMAGE
docker logout
'''
}
}
}
}
post {
always {
// 워크스페이스 정리
cleanWs()
}
success {
echo "Pipeline completed successfully."
echo "Image pushed: ${FULL_IMAGE}, ${LATEST_IMAGE}"
}
failure {
echo "Pipeline failed. Check logs for details."
}
}
}
설정 경로

General

Triggers

Pipeline


Webhook 설정 방법은 다음 글을 참고해주세요.
🔗 Jenkins에 GitHub Webhook 연동하기
🥳 이제 커밋 한 줄만으로도 파이프라인이 자동으로 실행됩니다.
# 테스트 커밋 생성
echo "# Jenkins webhook trigger test" >> README.md
git add README.md
git commit -m "jenkins webhook trigger test"
git push origin main
아래와 같이 빌드부터 이미지 푸시까지 자동으로 실행되는 것을 확인할 수 있습니다!

