본문 바로가기
컴퓨터 활용(한글, 오피스 등)/기타

젠킨스 배치 작업|Jenkins java.io.tmpdir 설정 방법

by 3604 2025. 11. 19.
728x90
 
  •  
젠킨스 배치 작업의 임시 디렉토리를 변경하는 것은 소스 코드 수정 없이 해결 가능한 경우가 많지만, 몇 가지 중요한 검증 사항이 있습니다.

소스 코드 검증 (필수 점검)

점검해야 할 3가지 사항:
  1. 하드코딩된 경로 존재 여부 ★ 가장 중요
    bash
    # 소스 코드에서 다음과 같은 하드코딩 검색
    grep -r "/var/tmp" /path/to/source
    
    # 문제되는 코드 예시
    File tempFile = new File("/var/tmp/batch_output.dat");  # 하드코딩 → 수정 필요
    File tempFile = new File(System.getProperty("java.io.tmpdir"), "batch_output.dat");  # OK
  2. Jenkins 파이프라인 절대 경로 사용
    groovy
    // 문제되는 파이프라인 코드 예시
    sh 'python /var/tmp/batch_processor.py'  # 수정 필요
    sh "python ${env.JAVA_IO_TMPDIR}/batch_processor.py"  // OK
  3. 외부 쉘 스크립트 경로
    bash
    # 배치 스크립트 내 하드코딩된 경로 검사
    grep "var/tmp" /path/to/scripts/*.sh

Jenkins java.io.tmpdir 설정 방법

방법 1: 젠킨스 서비스 설정 파일 (권장)

CentOS/RHEL

bash
 
sudo vi /etc/sysconfig/jenkins
properties
 
# 기존 JENKINS_JAVA_OPTIONS에 추가
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Djava.io.tmpdir=/data/temp/batch"

Ubuntu/Debian

bash
 
sudo vi /etc/default/jenkins
properties
 
# JAVA_ARGS에 추가
JAVA_ARGS="-Djava.awt.headless=true -Djava.io.tmpdir=/data/temp/batch"

systemd 직접 설정 (최신 버전)

bash
 
sudo systemctl edit jenkins
ini
 
[Service]
Environment="JAVA_OPTS=-Djava.io.tmpdir=/data/temp/batch -Djava.awt.headless=true"
적용 순서:
bash
 
sudo mkdir -p /data/temp/batch
sudo chown jenkins:jenkins /data/temp/batch
sudo chmod 755 /data/temp/batch
sudo systemctl daemon-reload
sudo systemctl restart jenkins

방법 2: 젠킨스 파이프라인 단계별 설정

groovy
 
pipeline {
    agent any
    environment {
        JAVA_OPTS = "-Djava.io.tmpdir=/data/temp/batch/${BUILD_NUMBER}"
    }
    stages {
        stage('배치 실행') {
            environment {
                // 파이프라인 전용 임시 디렉토리
                TMPDIR = "/data/temp/batch/${JOB_NAME}/${BUILD_NUMBER}"
            }
            steps {
                sh '''
                    export JAVA_OPTS="-Djava.io.tmpdir=${TMPDIR}"
                    java -jar batch-processor.jar
                '''
            }
            post {
                always {
                    // 작업 후 정리 (필수)
                    sh "rm -rf /data/temp/batch/${JOB_NAME}/${BUILD_NUMBER}"
                }
            }
        }
    }
}

방법 3: Jenkins Global Properties

Jenkins 관리 → 시스템 설정 → 전역 속성 → 환경 변수
properties
 
JAVA_OPTS = -Djava.io.tmpdir=/data/temp/batch

권장 디렉토리 구조 및 정책

bash
 
# 디렉토리 구조
/data/temp/
├── batch/               # 젠킨스 전용 임시 디렉토리
│   ├── jenkins-agent/   # 에이전트 임시 파일
│   └── builds/          # 빌드별 임시 파일
├── system/              # 기타 시스템 임시
└── cleanup.log

# 정리 스크립트 (/etc/cron.daily/jenkins-tmp-cleanup)
#!/bin/bash
find /data/temp/batch -type d -mtime +1 -name "build-*" -exec rm -rf {} \;
find /data/temp/batch -type f -atime +7 -delete

검증 및 테스트

bash
 
# 1. 설정 확인
sudo ps -ef | grep jenkins | grep java.io.tmpdir

# 2. Jenkins에서 파이프라인 테스트
pipeline {
    agent any
    stages {
        stage('검증') {
            steps {
                sh 'echo "임시 디렉토리: $JAVA_OPTS"'
                sh 'java -XshowSettings:properties -version 2>&1 | grep java.io.tmpdir'
            }
        }
    }
}

# 3. 권한 확인
ls -ld /data/temp/batch
df -h /data

주의사항 및 결론

항목 상태 조치
코드가 java.io.tmpdir 사용 설정만으로 해결
코드에 /var/tmp 하드코딩 소스 코드 수정 필수
쉘 스크립트 절대 경로 스크립트 수정 또는 심볼릭 링크 사용
Jenkins 파이프라인 하드코딩 파이프라인 코드 수정 필요
최종 권장사항:
  1. 소스 코드 점검 먼저 (하드코딩 여부 확인)
  2. Jenkins 서비스 설정 파일 수정 (방법 1)
  3. 파이프라인별 고유 임시 디렉토리 사용 (동시 실행 충돌 방지)
  4. 정기 정리 스크립트 배치 (디스크 공간 관리)
  5. 모니터링 설정 (디스크 사용량 80% 알림)
소스 코드에 하드코딩이 없다면 Jenkins 설정만으로 문제 해결 가능합니다.
728x90