젠킨스 프로젝트 설정
- 프로젝트 소스가 담긴 Github 레포지토리 준비
- 젠킨스 빌드 환경 설정
- Build Steps > Execute shell
- docker build -t [도커허브username]/이미지명 .
- docker push [도커허브username]/이미지명
- Docker 이용해 이미지 빌드하고 DockerHub 레지스트리에 푸시
- kubctl을 이용 레지스트리로부터 이미지 가져다 같은 클러스터에 배포 및 노출
컨테이너 스펙을 작성해서 포드 템플릿 설정
- 신규추가 포드 템플릿에 두 개 컨테이너 스펙 포함 예정
- 빌드 작업 실해할 컨테이너(이름:jnlp)
- JNLP을 따라 Jenkins 마스터와 작업 조율하면서 빌드 작업 실행
- docker CLI와 kubectl CLI (잠시 후에 이용하려고 하니)를 갖추고 있음
- 미리 만들어진 이미지 이용
- 도커 데몬을 실행하는 컨테이너(이름:dind)
- 어느 클러스터에 있더라도 통일된 docker build 환경 제공 위해 독립된 컨테이너로 제공
- 이미지 : docker:latest 이용
- 어느 클러스터에 있더라도 통일된 docker build 환경 제공 위해 독립된 컨테이너로 제공
[이슈]
문제발생 : 에러 계속남. pending 문제.
2025.12.16 - [웹 파이프라인/Jenkins] - [트러블슈팅]Jenkins + Kubernetes Agent Pending / Docker Build 실패
[트러블슈팅]Jenkins + Kubernetes Agent Pending / Docker Build 실패
1> 문제 발생 (Symptoms) 현상 1 — Jenkins 빌드가 계속 PendingFreestyle Project 실행 시 Waiting for next available executor Jenkins UI에서 에이전트가 잡히지 않음kubectl get pod -n jenkins 시 에이전트 Pod 생성되지 않거
thinktank911.tistory.com
Kubernetes 클러스터 접근 권한 설정 (준비)
Docker desktop 이용한 클러스터를 운용하고 있는 호스트(내컴퓨터)에서
~/.kube/config 파일 꺼내보면
- 쿠버네티스 컨트롤 플레인에 접속 위한 서버 url
- 여기 접속할 계정의 이름
- 이 계정을 인증하기 위하여 제출할 데이터
=> 노출 x
=> 이 내용을 내 클러스터 내의 Jenkins에게는 알려줄 수 있음
간단한 젠킨스 파이프라인
- 간단한 파이프라인을 구성하고 이에 의해서 다음 과정이 수행되도록 실험
- docker build & push
- kubectl에 의하여 deployment 및 service 생성
- 위 파이프라인 정의를 Jenkinsfile로 만들고 이것을 리포지토리에 등록하여 빌드 과정 자동화
[파이프라인 스크립트 구조]
pipeline {
environment {
}
agent any
stages {
stage() {
}
stage
stage
}
post {
always {
}
}
}
파이프라인 스크립트
- 도커 pipeline 플러그인 있어야함
- agent any => kubernetes로 변경
pipeline {
environment {
dockerImageName = "geniusyoung/simple-echo"
}
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: jnlp
image: sheayun/jnlp-agent-sample
env:
- name: DOCKER_HOST
value: "tcp://localhost:2375"
- name: dind
image: docker:24-dind
command:
- /usr/local/bin/dockerd-entrypoint.sh
env:
- name: DOCKER_TLS_CERTDIR
value: ""
securityContext:
privileged: true
'''
}
}
stages {
stage('git scm update') {
steps {
sh "git clone https://github.com/7saval/jenkins_exam.git ."
}
}
stage('docker build && push') {
steps {
script {
dockerImage = docker.build.dockerImageName
docker.withRegistry('https://registry.hub.docker.com',
'dockerhub-credentials') {
dockerImage.push("latest")
}
}
}
}
stage('deploy application on kubernetes cluster'){
steps {
withKubeConfig([credentialsId: 'KUBECONFIG',
serverUrl: 'https://kubernetes.default',
namespace: 'jenkins'
]) {
sh '''
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
'''
}
}
}
}
post {
always {
sh 'docker logout'
}
}
}
Jenkinsfile로 자동화
- git scm update의 step 내용 변경
stage('git scm update') {
steps {
// sh "git clone https://github.com/7saval/jenkins_exam.git ."
checkout scm
}
}
- definition 변경
- Pipeline script from SCM
- git 설정
요약

'웹 파이프라인 > Jenkins' 카테고리의 다른 글
| CI 파이프라인 - 빌드 에이전트 개선, 단위테스트, 테스트커버리지, 코드 규약 준수 분석(정적 검사), 빌드 자동화 (1) | 2025.12.16 |
|---|---|
| [트러블슈팅]Jenkins + Kubernetes Agent Pending / Docker Build 실패 (0) | 2025.12.16 |
| k8s 클러스터에 젠킨스 설치 (0) | 2025.12.15 |
| 1217 CI 도구로서의 젠킨스 (0) | 2025.12.15 |