1. Issue
파이프라인 스크립트로 통해 프로세스를 체크하고, 재실행하는 과정에서 kill -9 [PID] 실행 시 오류 발생
2. Problem
하나의 서버에 Jenkins를 구축하고, 해당 서버에서 스크립트를 실행하게 되면 권한에 따른 오류가 발생하게 된다. 만약, 원격 서버가 따로 존재한다면 ssh로 접속하기 때문에 별다른 문제가 발생하지 않는다.
3. Solution
Jenkins 사용자에게 sudo 권한 부여하고 sudo로 kill 명령어를 실행한다.
1) 관리자 계정 로그인
su - [관리자 계정]
2) 권한 설정
// 수정하기 위한 쓰기 권한 부여
chmod 640 /etc/sudoers
// 수정
vi /etc/sudoers
// jenkins에 권한 부여
jenkins ALL=(ALL) NOPASSWD: ALL
3) Jenkins 파이프라인 수정
재실행하기 위해 체크하는 부분
// 수정 전
kill -9 [PID]
// 수정 훈
sudo kill -9 [PID]
stage('RESTART') {
steps {
script {
try {
def acadiaPid = sh(script: 'pgrep -f jex-arcadia-studio-0.0.1-SNAPSHOT.jar || true', returnStdout: true).trim()
echo "> 실행중인 ACADIA 찾는 중 ..."
if (acadiaPid.isEmpty()) {
echo "> ACADIA는 실행 중이 아닙니다."
} else {
echo "> kill -9 $acadiaPid"
sh "sudo kill -9 $acadiaPid"
}
echo "> ACADIA 실행 중 ..."
sh """
JENKINS_NODE_COOKIE=dontKillMe sudo -u was nohup java -jar -Dspring.profiles.active=prod /home/was/acadia/studio/ACADIA/target/jex-arcadia-studio-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &
"""
} catch (Exception e) {
echo "오류 발생: ${e.message}"
currentBuild.result = 'FAILURE'
}
}
}
}
반응형