본문 바로가기

트러블 슈팅

[트러블슈팅] Jenkins에서 Tomcat 실행 문제 해결 (Build step 'Send build artifacts over SSH' changed build result to UNSTABLE)

문제 발생

Jenkins에서 Tomcat을 자동으로 실행하려고 startup.sh 스크립트를 실행했지만, 아래와 같은 오류가 발생했다.

BUILD SUCCESSFUL
Total time: 17 seconds
SSH: Connecting from host [kdexp-brand-test]
SSH: Connecting with configuration [brand-test 125 (war)] ...
SSH: EXEC: completed after 6,207 ms
SSH: Disconnecting configuration [brand-test 125 (war)] ...
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] done
Finished: UNSTABLE

빌드는 성공했지만, Tomcat이 정상적으로 실행되지 않았고 UNSTABLE 상태로 끝나는 문제가 발생했다.


🧩 원인 분석

로그를 확인한 결과, Jenkins 사용자가 startup.sh를 실행할 권한이 없기 때문이라는 결론을 내렸다.

이전에 Tomcat이 실행되던 기존 경로를 변경하면서 Jenkins 설정도 변경하였는데, 새로운 경로에 대해 startup.sh에 실행 권한을 부여하지는 않았기에 권한 문제일 것으로 파악했다.

즉 Jenkins가 배포 후 원격 서버에서 Tomcat을 실행하는 과정에서 권한 부족으로 실행되지 않은 것이 문제였다.


문제 해결

권한 문제를 해결하기 위해 다음 명령어를 실행했다.

sudo chmod +x /톰캣경로/bin/startup.sh

이 명령어를 통해 startup.sh에 실행 권한을 부여했다.

이후 Jenkins에서 다시 빌드를 실행한 결과, 정상적으로 Tomcat이 실행되었다.

 

BUILD SUCCESSFUL
Total time: 21 seconds
SSH: Connecting from host [kdexp-brand-test]
SSH: Connecting with configuration [brand-test 125 (war)] ...
SSH: EXEC: completed after 2,204 ms
SSH: Disconnecting configuration [brand-test 125 (war)] ...
SSH: Transferred 1 file(s)
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] done
Finished: SUCCESS

 

 

👉 결론

Jenkins에서 원격 서버의 Tomcat을 실행하려면, 실행 스크립트(startup.sh)에 적절한 실행 권한을 부여해야 한다.

만약 실행 권한이 없다면 Jenkins에서 해당 스크립트를 실행할 수 없고, 빌드가 UNSTABLE 상태로 끝날 수 있다.

특히, Tomcat 경로가 변경된 경우 새로운 경로에 대한 실행 권한도 함께 설정해야 한다.

 

+ Tomcat 실행 스크립트에 직접 실행 권한을 부여하여 문제를 해결할 수는 있으나, 이는 불특정 사용자에게 권한이 열릴 수 있어 보안상 취약할 수 있다고 한다...
보다 안전하고 깔끔한 방법은 Tomcat을 systemd 서비스로 등록해 운영체제 차원에서 관리하고,
Jenkins 배포 스크립트에서는 `sudo systemctl restart tomcat.service` 명령만 실행할 수 있도록 제한하는 것이다.