728x90
젠킨스 배치 작업의 임시 디렉토리를 변경하는 것은 소스 코드 수정 없이 해결 가능한 경우가 많지만, 몇 가지 중요한 검증 사항이 있습니다.
소스 코드 검증 (필수 점검)
점검해야 할 3가지 사항:
-
하드코딩된 경로 존재 여부 ★ 가장 중요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 -
Jenkins 파이프라인 절대 경로 사용groovy
// 문제되는 파이프라인 코드 예시 sh 'python /var/tmp/batch_processor.py' # 수정 필요 sh "python ${env.JAVA_IO_TMPDIR}/batch_processor.py" // OK -
외부 쉘 스크립트 경로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 파이프라인 하드코딩 | ❌ | 파이프라인 코드 수정 필요 |
최종 권장사항:
-
소스 코드 점검 먼저 (하드코딩 여부 확인)
-
Jenkins 서비스 설정 파일 수정 (방법 1)
-
파이프라인별 고유 임시 디렉토리 사용 (동시 실행 충돌 방지)
-
정기 정리 스크립트 배치 (디스크 공간 관리)
-
모니터링 설정 (디스크 사용량 80% 알림)
소스 코드에 하드코딩이 없다면 Jenkins 설정만으로 문제 해결 가능합니다.
728x90
'컴퓨터 활용(한글, 오피스 등) > 기타' 카테고리의 다른 글
| RFP 작성법, 작성주체, 작성절차, 고려사항 (0) | 2025.11.21 |
|---|---|
| 파이프라인 스크립트 내부와 젠킨스 시스템 설정 (0) | 2025.11.19 |
| 리눅스|디렉토리|/var/tmp (0) | 2025.11.19 |
| 참고자료| 파일시스템 |FHS (0) | 2025.11.19 |
| 용어| 기간계 시스템, 계정계 시스템, 정보계 시스템 (0) | 2025.11.13 |