젠킨스를 이용해서 스프링 부트, 그래들 프로젝트를 자동으로 서버에 배포하기 위한 절차를 정리한다.
이전 Github Repository Clone Stage 와 Gradle Project Build Stage를 성공적으로 수행되었다면, build/libs 경로에 실행 가능한 .jar 파일이 생성되었을 것이다.
해당 파일을 이제 Oracle Cloud 서버의 경로로 전달을 해주어야 구축되어 있는 환경에서 배포를 진행할 수 있다.
젠킨스 서버에서 애플리이셔 클라우드 서버로 .jar 파일을 전송하기 위해선 ssh를 이용해 전달하는데, 젠킨스는 Publish Over SSH 플러그인을 통해 ssh 기능을 이용할 수 있다.
젠킨스 대시보드 메인 > 플러그인 매니저 > 설치 가능 탭으로 이동해 오른쪽 검색을 통해 해당 플러그인을 검색해 설치한다.
젠킨스 대시보드 > 시스템 설정 > Publish Over SSH 탭으로 이동한다.
Key 텍스트 필드에 클라우드에 접속하는데 사용하는 Private Key를 복사해서 붙여넣어준다.
그리고 하단의 SSH Servers 추가 버튼을 클릭해 내용을 작성해준다.
모든 정보를 입력한 후 Test Configuration을 누르면 Succes 와 함께 제대로 연동됨을 확인할 수 있다.
해당 프로젝트를 연동하는 과정에서 접속 가능한 Private 키를 지정해도 Test Connection이 제대로 연동되지 않는 경우가 있었다.
기존 클라우드 접속 Private Key 의 포맷은 b3Blb로 시작하는 개인키였다. 해당 포맷은 최신 OpenSSH 포맷이기 때문에 젠킨스 혹은 플러그인에서 읽을 수가 없다는 이슈를 확인했다.
따라서, 젠킨스나 플러그인이 읽을 수 있는 포맷의 개인키/공개키를 새로 생성해야했다.
$ ssh-keygen -t rsa -b 4096 -m PEM
위의 명령어로 새로운 개인키/공개키를 생성 시 “MIIE” 포맷으로 시작하는 개인키가 생성되고, 해당 개인키를 Key 텍스트 필드에 입력해주면 Test Configuration이 성공한다.
SSH 설정을 통해 클라우드 서버에 연결이 되었기 때문에 Pipeline Script를 이용해서 젠킨스 서버 경로에 있는 jar 파일을 클라우드 서버로 전달해줘야한다.
대시보드 > “설정한 파이프라인" > 하단의 Pipeline Syntax를 이용해서 스크립트를 만들어준다.
Snippet Generator의 Steps에서 sshPublisher: Send build artifacts over SSH를 선택한다.
작성한 후 아래 Generate를 통해 pipeline script를 복사한 후 Pipeline에 새로운 Stage를 만들고 steps에 붙여넣는다.
Pipeline Script 하단의 verbose 부분을 true로 변경해주면 Log가 상세하게 찍히므로 디버깅시에 유용하다.
젠킨스 Pipeline을 통해 빌드 시작 전 deploy 폴더에 아무 파일도없고, script 파일에 파일 전달 받은 후 실행할 쉘 스크립트 파일을 작성해 놓았다.
실제로 Pipeline을 실행해서 지금까지 작성한 stage 들이 제대로 작동하는지 확인한 후 위의 경로에 작성한 스크립트 파일과 jar 파일이 제대로 전달되었는지 확인해본다.
Pipeline을 이용해 지금까지 작성한 3개의 Stage가 모두 제대로 실행되었고, 젠킨스 Log에 위에서 작성한 Script 파일의 명령어가 제대로 수행된 것을 확인할 수 있다.
또한, 2번째 Stage에서 Build한 Jar파일이 제대로 클라우드 서버의 Remote Directory로 전달됨을 확인할 수 있다.
[우젠구2편] 젠킨스 파이프라인을 활용한 배포 자동화 : https://velog.io/@sihyung92/우젠구2편-젠킨스-파이프라인을-활용한-배포-자동화
Jenkins 공식 문서 : https://www.jenkins.io/doc/book/using/
[Jenkins] Jenkins & Github 연동 및 자동배포 구성하기 3 : https://dbjh.tistory.com/68