Study Note

Github + Jenkins 연동과 Jenkins로 Build 후 ssh로 배포하기 2 본문

Jenkins

Github + Jenkins 연동과 Jenkins로 Build 후 ssh로 배포하기 2

moreLearn 2020. 2. 23. 00:16

저번에는 jenkins에서 build 하는 것까지 했습니다.

이번에는 build를 한 후에 다른 ec2에 ssh로 연동을 통해서 배포를 하겠습니다.

먼저 이전에 jenkins가 설치되어 있는 ec2에서 cat /home/ubuntu/.ssh/id_rsa.pub를 통해 id_rsa.pub을 복사합니다.

 

복사한 값을 배포할 ec2의 authorized_keys에 추가합니다.

authorized_keys는 ubuntu의 경우 /home/ubuntu/.ssh/authorized_keys에 기본적으로 만들어져 있습니다.

vim /home/ubuntu/.ssh/authorized_keys 명령어에서 알 수 있듯이 vim 에디터로 붙여 넣습니다.

 

  • 1번 값은 ec2 접속할 때 사용하는 .pem 파일의 인증 값입니다. 해당 값을 지우면 pem 혹은 ppk를 통해서 접속할 수 없습니다.
  • 2번 값은 id_rsa.pub의 값입니다. 해당 값을 추가했기 때문에 이후에 jenkins에서 자신의 ssh key를 이용하여 접속할 수 있습니다.

 

저는 mkdir /home/ubuntu/springboot를 통해서 빌드 된 jar 파일을 저장할 directory를 만들었습니다.

 

배포하고 jar 파일을 restart 하기 위한 shell script 파일을  작성했습니다.

 vim /home/ubuntu/springboot/restart.sh

 

이제 jenkins에서 ssh를 통해 배포하겠습니다.

jenkins 관리 -> 플러그인 관리에 들어갑니다.

 

설치가능에서 필터에 Publish Over SSH를 검색하여 설치합니다.

 

이후 jenkins 관리 -> 시스템 설정에 들어갑니다.

 

Publish Over SSH 항목을 설정합니다.

key에는 id_rsa의 값을 붙여 넣습니다.

HostName에는 배포할 서버의 private ip를 입력합니다.

Username은 ubuntu로 진행하며, Remote Directory에는 위에서 생성한 directory의 경로를 입력하고 저장합니다.

 

이전에 만든 프로젝트를 수정하겠습니다.

구성을 통해 설정을 변경할 수 있습니다.

 

빌드 후 조치에서 Send build artifacts over SSH를 선택합니다.

  • Name : 위에서 설정한 Publish Over SSH에서 SSH Server 항목의 Name과 같은 것을 선택합니다.
  • Source files : 서버에 업로드할 파일을 선택하는 곳입니다. 저의 경우 /var/lib/jenkins/workspace/SpringBootProject가 해당 item의 default 경로입니다.
  • Remove prefix : 파일 전송 시 source file에서 제거되는 prefix입니다. 저의 경우 target을 입력했기 때문에 target이 제거됩니다.
  • Remote directory : 위에서 설정한 Publish Over SSH에서 입력한 remote directory 이후의 경로입니다.
  • Exec Commend : 전송이 완료된 후 실행되는 command입니다. restart.sh를 nohub으로 실행합니다.

 

위 설정을 저장한 후 Build Now를 통해 item을 Build 합니다.

 

배포 서버용 ec2에서 다음과 같이 jar 파일이 저장됩니다.

 

제가 이전에 만들었던 springboot가 정상적으로 작동합니다.

 

여기까지 jenkins + github을 이용하여 CI/CD를 구성해 보았습니다.

 

이 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.