일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- kotlin coroutine
- AI
- docker
- 정보처리기사실기 기출문제
- 공부
- 오블완
- tucker의 go 언어 프로그래밍
- 코틀린 코루틴의 정석
- CKA 기출문제
- kotlin
- Pinpoint
- mysql 튜닝
- Kubernetes
- Spring
- minikube
- 티스토리챌린지
- PETERICA
- 기록으로 실력을 쌓자
- CKA
- APM
- AWS EKS
- kotlin querydsl
- 정보처리기사 실기 기출문제
- Java
- go
- aws
- golang
- Elasticsearch
- CloudWatch
- Linux
- Today
- Total
피터의 개발이야기
[Jenkins] Jenkins Pipeline으로 쉘 스크립트를 주기적으로 실행하기 본문

ㅁ 들어가며
로그정리가 필요한 서버가 발생하였다. 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)
'DevOps > Jenkins' 카테고리의 다른 글
[Jenkins] pipeline에서 SSH Agent를 이용한 원격서버 관리방법 (0) | 2025.02.03 |
---|---|
[jenkins] Jenkins “Pending – Waiting for Next Executor” 해결방법 (0) | 2024.02.21 |
[Jenkins] Docker 기반 Jenkins quick start examples (1) | 2023.10.19 |
[jenkins] jenkins 빌드 후 JAR 파일 복사 (1) | 2023.10.17 |
[Jenkins] jenkins 로컬시간 변경하기 (0) | 2022.10.24 |