- 강의 질문
- 프로그래밍
Jenkins에서 pointBalanceSyncJob을 실행 시켰을때 redis와 연결이 안되는 에러가 발생합니다.
안녕하세요
Part 4. 실시간 적립금 조회 시스템 구축
Ch 4. Spring Batch를 활용한 배치처리
04. Jenkins를 활용한 배치 작업 스케줄링 및 모니터링 부분 강의를 수강 중입니다.
해당 강의에서
docker-compose.yml 을 실행 시키고
localhost:8888 로 접속해서 jenkins 로 로그인해서
pipeline으로 pointBalanceSyncJob 을 생성 했습니다.
그런데 에러가 발생했습니다.
우선 참고로 pipeline 스크립트는 다음과 같습니다.
(코드 블럭에 복붙이 안먹어서 그냥 코드블럭 없이 보여 드립니다.)
참고로 자꾸 왼쪽으로 들여쓰기된 상태로 변경돼서 참고 부탁드립니다.
pipeline {
agent any
environment {
GRADLE_HOME = tool 'Gradle'
PATH = "${GRADLE_HOME}/bin:${PATH}"
SPRING_PROFILES_ACTIVE = 'dev' // Spring 환경 변수 추가
}
triggers {
// 매일 새벽 1시 실행
cron('0 1 * * *')
}
stages {
stage('Checkout') {
steps {
git branch: 'main',
credentialsId: 'git-credentials',
url: 'https://github.com/JeongTaekgyu/ecommerce-large-scale-msa.git'
}
}
stage('Change Directory and Print Working Directory') {
steps {
script {
// dir('PROJECT-PROMOTION/promotion/') { // 작업할 디렉토리
dir('promotion/') { // 작업할 디렉토리
sh 'pwd' // 현재 디렉토리 출력
}
}
}
}
stage('Build') {
steps {
// dir('PROJECT-PROMOTION/promotion/') { // 작업할 디렉토리
dir('promotion/') { // 작업할 디렉토리
sh './gradlew :point-service-batch:build -x test'
}
}
}
stage('Point Balance Sync') {
steps {
// dir('PROJECT-PROMOTION/promotion/') { // 작업할 디렉토리
dir('promotion/') { // 작업할 디렉토리
script {
try {
sh '''
./gradlew :point-service-batch:bootRun \
--args="--job.name=pointBalanceSyncJob --spring.profiles.active=${SPRING_PROFILES_ACTIVE}"
'''
} catch (Exception e) {
currentBuild.result = 'FAILURE'
error("Point Balance Sync Job failed: ${e.message}")
}
}
}
}
}
}
}
파이프라인 스크립트에는 저의 github repository 인
https://github.com/JeongTaekgyu/ecommerce-large-scale-msa.git 을 등록했고
directory는 gradlew 파일이 있는 곳으로 등록했습니다.
jenkins의
/var/jenkins_home/workspace/pointBalanceSyncJob/PROJECT-PROMOTION/promotion
해당 디렉토리에 gradlew 파일이 없습니다.
확인해 보니 저의 git remote repository를 보니까 /PROJECT-PROMOTION 디렉토리는 없고
promotion 부터 시작해서 그런것 같습니다.
일단 제 github remote repository 에 디렉토리가 promotion 부터 시작하니까 pipeline 스크립트는 저렇게 dirtory를 전부 'promotion/' 으로 작성했습니다.
먼저 docker-compose.yml 파일을 실행 시켰습니다.
참고로 다른점이 있다면
예전 강의의 pinpont를 만들때 redis-practice 라는 컨테이너 이름을 생성해서
지금 docker-compose.yml 파일에선 redis의 컨테이너 이름을 redis-pratice2 로 했습니다.
그리고 jenkins의 pointBalanceSyncJob를 빌드 했습니다.
참고로 No tool named Gradle found 에러가 발생했을때
Jenkins 관리 - Tools의 Gradle installations에서
이렇게 강의와 동일한 버전을 선택했습니다.
그리고
jenkins 의 pointBalanceSyncJob 를 실행시켰습니다
실행 시켰더니 spring은 잘 실행 됐으나 에러가 발생했습니다.
console ouput 이 너무 길어 핵심 에러만 알려드립니다.
에러는 다음과 같습니다.
2025-04-24T17:26:58.910+09:00 WARN 2355 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'pointServiceBatchApplication': Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 'pointBalanceSyncJobConfig' defined in file [/var/jenkins_home/workspace/pointBalanceSyncJob/promotion/point-service-batch/build/classes/java/main/com/example/pointservicebatch/job/PointBalanceSyncJobConfig.class]: Unsatisfied dependency expressed through constructor parameter 3: Error creating bean with name 'redisson' defined in class path resource [org/redisson/spring/starter/RedissonAutoConfiguration.class]: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redisson' threw exception with message: Unable to connect to Redis server: localhost/127.0.0.1:6379.
결론은 spring 에서 redis를 실행할 수 없다는 에러로 보입니다.
참고로 젝 github remote repository는 아까 말한 주소입니다.
이해가 안가는것이 현재 로컬에서 docker ps 명령어를 입력하면 다음과 같습니다.
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b64b279f1e60 jenkins/jenkins:lts "/usr/bin/tini -- /u…" 19 hours ago Up 2 hours 0.0.0.0:50000->50000/tcp, 0.0.0.0:8888->8080/tcp jenkins
45b896cc6ec8 prom/prometheus:v2.45.0 "/bin/prometheus --c…" 8 days ago Up 2 hours 9090/tcp, 0.0.0.0:9091->9091/tcp prometheus
b7e3a2d3a796 provectuslabs/kafka-ui:latest "/bin/sh -c 'java --…" 9 days ago Up 2 hours 0.0.0.0:8999->8080/tcp infrastructure-kafka-ui-1
5a63b38a6889 grafana/grafana:10.0.3 "/run.sh" 9 days ago Up 2 hours 0.0.0.0:3000->3000/tcp grafana
ffe64db05a15 confluentinc/cp-kafka:7.5.1 "/etc/confluent/dock…" 13 days ago Up 2 hours 0.0.0.0:9092->9092/tcp kafka2
ea748b1e03d6 redis:latest "docker-entrypoint.s…" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp e2ff61ac5f74_redis-practice2
분명 docker-compose.yml 에 등록한 컨테이너들은 다 잘 실행되고 있습니다.
그런데 대체왜 에러가 발생했을까요?
분명 application.yml 과 docker-compose.yml 은 제 github repository 가면 확인하실 수 있습니다.
원인을 잘 모르겠어 질문 드립니다.