관리 메뉴

피터의 개발이야기

[Jenkins] Jenkins Pipeline으로 쉘 스크립트를 주기적으로 실행하기 본문

DevOps/Jenkins

[Jenkins] Jenkins Pipeline으로 쉘 스크립트를 주기적으로 실행하기

기록하는 백앤드개발자 2025. 3. 12. 06:42
반응형

ㅁ 들어가며

 로그정리가 필요한 서버가 발생하였다. Cronjob으로 할 수 있지만, 이력 관리를 위해 Jenkins Pipeline으로 쉘 스크립트를 실행하여 로그 정리를 하기로 하였다. 이전 글인, [Jenkins] pipeline에서 SSH Agent를 이용한 원격서버 관리방법에서 Jenkins에서 원격 서버에 접속하여 쉘 스크립트를 실행하는 과정을 정리하였는데, 이를 이용하여 젠킨스에서 배치 작업을 설정하는 방법을 정리하였다.

 

ㅁ Jenkins Pipeline 구성

ㅇ "새로운 Item" -> "Pipeline" 선택

 

 

ㅁ 빌드 주기 설정

Build periodically을 선택하여 빌드 주기를 설정한다. 

ㅇ H 0 * * * → 매일 자정 실행

 

ㅁ Pipeline script 작성

pipeline {
    agent any

    stages {
    	// 삭제 대상 list 출력 및 삭제
        stage('remove list') {
            steps {
                // SSH Agent를 사용하여 원격 서버에 접속
                sshagent(credentials: ['peterica-server-key']) {
                    // 원격 서버에서 명령어 실행
                    sh """
                        ssh -o StrictHostKeyChecking=no peterseo@192.168.33.24 '
                            docker exec docker-run find /home/deploy/log -mindepth 1 -mmin +60 -print
                            docker exec docker-run sh -c "find /home/deploy/log -type f -mmin +60 -exec rm {} \\;"
                        '
                    """
                }
            }
        }
        
        // 완료
        stage('Done') {
            steps {
                script {
                    echo 'Done'
                }
            }
        }
    }
}

ㅇ 원격서버의 도커 컨테이너 안의 log폴더의 삭제 대상을 확인하여 젠킨스 컨솔에 출력하고, 삭제한다.

 

ㅁ 트러블 슈팅

ㅇ 스크립트 작성 후 테스트 진행하였는데 Groovy와 Bash의 이스케이프 규칙이 다르기 때문에 에러가 발생하였다. 

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 20: unexpected char: '\' @ line 20, column 111.

ㅇ 에러는 주로 Groovy 스크립트에서 이스케이프 문자를 잘못 사용했을 때 발생한다.

ㅇ 이 경우, \ 문자가 Groovy의 문법에서 예상치 못한 문자로 인식되어 오류가 발생한 것이었다.

 

다른 이스케이프 문제 확인

# shell(정상)
find /home/deploy/hls -mindepth 1 -mmin +60 -exec rm {} \;

# Groovy
sh "find /home/deploy/hls -mindepth 1 -mmin +60 -exec rm {} \\;"

ㅇ Groovy와 Bash의 이스케이프 규칙이 다르기 때문에, 다른 부분에서도 이스케이프가 필요한지 확인해야 한다.

 

ㅁ 함께 보면 좋은 사이트

[젠킨스(Jenkins)] 기초 2. 파이프라인 문법 (쉘)

 ㄴ.  sh(..) 명령어를 이용하여 쉘 스크립트 실행

 ㄴ sh 변수 출력 방법

 ㄴ sh 여러줄 실행 

Jenkins 주기적 파이프라인 실행(build periodically)

 

반응형
Comments