본문 바로가기

🤔Troubleshooting

Jenkins / Publish over SSH 사용시 파일전달 오류(No such file or directory)

Publish over SSH에서 파일이 전달되지 않는 문제

이번에 프로젝트를 진행하면서 jenkins의 플러그인인 Publish over SSH를 사용하여 빌드된 파일을 web서버로 전송시킬 일이 있었습니다. 하지만 왠지 전송하고자하는 파일이 web서버로 넘어가지 않는 것 같았습니다. 이번 포스팅에서는 Publish over SSH를 세팅하면서 제가 겪었던 시행착오를 공유하려고 합니다.

Publish over SSH 세팅

Publish over SSH에 대한 설명이나 사용법에 대해서는 생략하고 결과적으로 설정한 값들만 설명드리겠습니다.

전송하고자 web Server과 연결하기

먼저 Publish over SSH 플러그인을 설치하고 jenkins관리 > 시스템 설정으로 들어가 Publish over SSH에 관한 몇 가지 설정을 해준 후 테스트를 해보니 통신에 성공하는 모습입니다. 파일을 전송할 수 있는 환경이 완성되었네요.

 

jenkins project 만들기

Build

Jenkins 서버와 다른 서버 간의 통신을 연결했다면 이제  어떤 파일을 전송하고 처리할 것인지 project를 만들어 설정 해주어야 합니다. 저는 item을 만드는 여러 방법 중 freestyle project타입의 item을 선택했습니다. 그리고 build단계에 다음과 같이 적어주었습니다.

build 과정 script

이렇게 해주면 결과적으로 아래 그림처럼 지정해준 경로에 tar파일이 생성됩니다.(실제로 여기까지는 문제가 없었습니다.)

의도한대로 tar파일이 생성된 모습

build 후 조치

그리고 빌드 후 조치에서 send build artifacts over ssh 작업을 추가하여 다음과 같이 설정해주었습니다.

SSH Server에는 포스팅 처음 부분에서 연결해준 server를 선택해주었습니다.

그리고 전송할 파일의 경로를 source files에 입력합니다.

remove prefix는 보내고자 하는 타겟 파일만 보내기 위해서 입력해줍니다. remove prefix 참고자료

exec command는 파일을 전송한 후에 진행할 작업 script입니다.(여기서는 별로 중요하진 않습니다.)

 

이제 모든 준비가 되었으니 build를 해서 확인해보겠습니다.

build에는 성공했지만 파일을 전송한 후에 진행하는 script에서 문제가 발생했습니다.

...중략
DEPLOY USER = ubuntu
ZIP_DIR = /home/ubuntu/app/zip
mv: cannot stat '/home/ubuntu/hashtagmap-web.tar': No such file or directory
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [prod_web_ubuntu@192.168.1.16] ...
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
Finished: UNSTABLE

4번째 줄을 보면 hashtagmap-web.tar 파일을 찾을 수 없다고 나옵니다.

 

문제 원인 및 해결

무엇이 문제였을까요? 여러 가지 검색해보니 워크스페이스상의 상대 경로를 입력해야 한다는 말이 있더군요.(링크)

'워크스페이스는 어디서 확인할 수 있을까' 찾아보다 잘 못 찾겠어서 일단 tar파일이 위치한 아래 경로

/var/lib/jenkins/workspace/web/script/hashtagmap-web/hashtagmap-web.tar

에서 '/var/lib/jenkins/workspace/web'를 워크스페이스로 생각하고 'script/hashtagmap-web/hashtagmap-web.tar'를 source files에 입력해보기로 했습니다.

그랬더니 성공!

전송에 성공하는 모습

정리

  • build가 정상적으로 동작하는 것까지는 확인됨

  • 하지만 파일전송에 실패

    => 전송할 파일의 경로인 source files에 문제가 있었음

  • source files를 상대 경로로 재설정

  • 상대 경로는 /var/lib/jenkins/workspace/프로젝트이름 인듯함

  • 전송에 성공!
반응형