반응형

local vm 환경에서는 같은 네트워크라서 그런지 sshpass같은 명령어로 execute shell에다가만 넣어도 

ssh인증이 문제가 없었는데.. (그놈의 vagrant가 또 문젠가...?)

회사 보안 정책상 뭐가 특이하게 걸려있는지

회사에서 받은 vm에서는 제대로 동작을 하지 않았다.


ssh key폴더를 바꿔보고 이리저리 플러그인을 설치해봤지만... execute shell로는 안되더라.


그러던중 public over ssh plugin이라는 넘을 우연찮게 발견을 했는데..


ssh인증을 미리 받아놓고, jenkins workspace에 있는 빌드 된 넘들을 remote directory (ssh인증을 받아놓은 서버)로 transfer를 해주는 훌륭한 기능을 가지고 있었다.


뭐 아래 링크에 나온 정보가 사실 가장 정확하긴 하지만, 나 처럼 영어를 싫어하는 사람들을 위해 손쉽게 설명을 하도록 함.

https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin

일단 Public Over SSH Plugin을 설치한 후에!


[Jenkins관리] - [시스템 설정]에 가보면, Add an SSH Server라고 아래와 같이 추가할 수 있는 화면이 나온다! 


Name은 Alias라고 보면 되고, hostname이랑 username정도만 적어준다.


그 후, 만들어둔 Item(Job) 설정으로 가서, 빌드 스텝을 추가하는데 아래와 같이 노란색으로 칠해진 넘이 추가가 되었다.


아래와 같이, 빌드 스텝이 아닌 빌드 후 조치사항에서도 동일하게 이용을 할 수가 있다.



체크를 하고나면, 드디어 원하는 동작을 할 수 있도록 구성된 UI가 보인다.

Source files는 jenkins의 job workspace 폴더를 기준으로 어떤 파일을 복사할 것인가에 대해 정의한다.

Remove prefix는 Source files에서 지정한 경로의 하위 폴더를 지우는 기능이라는데.. 이딴걸 어디다 쓰나 싶다.

Remote directory는 SSH Server로 지정한 서버의 원격지 폴더를 의미한다. 

(주의할 점은, 만약 계정이 test라면 /home/test를 기본 폴더로 보게 된다. /test 같은데다가 복사하려고 하면, ../../ 이런거 막 넣어도 원하는대로 안된다는 걸 명심하자. 문의한 사람이 ROOT경로에 /test로 만들어뒀길래.. 어떻게든 맞춰줄려고 왜 안되지 왜안되지 하면서 고민하다가 보니깐, 계정 폴더 하위에 들어가 있었다. ㅡㅡ;; 

본인처럼 삽질하지 말기를...)

Exec command는 파일 전송이 모두 끝난 이후에, SSH Server로 지정한 서버에서 실행될 스크립트를 지정해주는 기능이다.


아래 Add Server버튼이 있는 걸 보면 알겠지만, 서버 여러대에다가도 기존처럼 Execute Shell로 For Loop돌아가며 원시적으로 알아보기 힘든 스크립트를 작성하지 않고도, 깔끔하게 정리가 가능하다.


퇴근하고 계속 머리에 맴돌아서 집에와서 밥도 안먹고 2시간동안 삽질하다가 해결!


이로써 배포 자동화가 완성되었다.

반응형
,