[Jenkins CI/CD] 3. Jar 파일을 클라우드 서버로 전달하기
젠킨스를 이용해서 스프링 부트, 그래들 프로젝트를 자동으로 서버에 배포하기 위한 절차를 정리한다.
- GitHub Repository 코드를 clone 하기
- Gradle 프로젝트를 빌드하기
- 빌드된 Jar 파일을 클라우드 서버로 전달
- Develop 브랜치 PR 시 자동으로 배포 (WebHook 사용)
- Jenkins Slack 연동
🚚 빌드된 Jar 파일을 클라우드 서버로 전달
이전 Github Repository Clone Stage 와 Gradle Project Build Stage를 성공적으로 수행되었다면, build/libs 경로에 실행 가능한 .jar 파일이 생성되었을 것이다.
해당 파일을 이제 Oracle Cloud 서버의 경로로 전달을 해주어야 구축되어 있는 환경에서 배포를 진행할 수 있다.
📈 Jenkins Publish Over SSH 플러그인 설치
젠킨스 서버에서 애플리이셔 클라우드 서버로 .jar 파일을 전송하기 위해선 ssh를 이용해 전달하는데, 젠킨스는 Publish Over SSH 플러그인을 통해 ssh 기능을 이용할 수 있다.
젠킨스 대시보드 메인 > 플러그인 매니저 > 설치 가능 탭으로 이동해 오른쪽 검색을 통해 해당 플러그인을 검색해 설치한다.
젠킨스 대시보드 > 시스템 설정 > Publish Over SSH 탭으로 이동한다.
Key 텍스트 필드에 클라우드에 접속하는데 사용하는 Private Key를 복사해서 붙여넣어준다.
그리고 하단의 SSH Servers 추가 버튼을 클릭해 내용을 작성해준다.
- Name : 해당 설정의 이름을 지정
- Hostname : SSH를 이용해 접속할 도메인이름 (클라우드 공용 IP 주소)
- Username : SSH 접속시 필요한 유저이름
- Remote Directory : .Jar 파일 전송 시 Root 경로로 잡히는 경로
모든 정보를 입력한 후 Test Configuration을 누르면 Succes 와 함께 제대로 연동됨을 확인할 수 있다.
⚠️ Private Key 설정해도 Test Configuration을 실패하는 경우
해당 프로젝트를 연동하는 과정에서 접속 가능한 Private 키를 지정해도 Test Connection이 제대로 연동되지 않는 경우가 있었다.
기존 클라우드 접속 Private Key 의 포맷은 b3Blb로 시작하는 개인키였다. 해당 포맷은 최신 OpenSSH 포맷이기 때문에 젠킨스 혹은 플러그인에서 읽을 수가 없다는 이슈를 확인했다.
따라서, 젠킨스나 플러그인이 읽을 수 있는 포맷의 개인키/공개키를 새로 생성해야했다.
$ ssh-keygen -t rsa -b 4096 -m PEM
위의 명령어로 새로운 개인키/공개키를 생성 시 “MIIE” 포맷으로 시작하는 개인키가 생성되고, 해당 개인키를 Key 텍스트 필드에 입력해주면 Test Configuration이 성공한다.
✏️ Pipeline Script 작성하기
SSH 설정을 통해 클라우드 서버에 연결이 되었기 때문에 Pipeline Script를 이용해서 젠킨스 서버 경로에 있는 jar 파일을 클라우드 서버로 전달해줘야한다.
대시보드 > “설정한 파이프라인" > 하단의 Pipeline Syntax를 이용해서 스크립트를 만들어준다.
Snippet Generator의 Steps에서 sshPublisher: Send build artifacts over SSH를 선택한다.
- Name : 이전 Publish Over ssh에서 새로 추가한 서버를 선택한다.
- Source files : gradlew bootJar 명령어로 빌드한 Jar 실행파일이 저장된 경로를 작성한다. bootJar 명령어로 build 시 build/libs 경로에 파일이 생성된다.
- Remove prefix : Source files 경로의 하위폴더를 지운다. 하위 폴더를 지움으로 써 *.jar 파일만 전송할 수 있게 해준다.
- Remote Directory : 젠킨스 서버가 전달하는 Jar 파일을 저장할 디렉토리 (클라우드 내 사용자가 직접 생성한 디렉토리)
- Exec command : 파일 전송이후 해당 경로의 쉘 스크립트를 실행해 작성한 명령어를 실행할 수 있다.
작성한 후 아래 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로 전달됨을 확인할 수 있다.
📄 References
[우젠구2편] 젠킨스 파이프라인을 활용한 배포 자동화 : https://velog.io/@sihyung92/우젠구2편-젠킨스-파이프라인을-활용한-배포-자동화
Jenkins 공식 문서 : https://www.jenkins.io/doc/book/using/
[Jenkins] Jenkins & Github 연동 및 자동배포 구성하기 3 : https://dbjh.tistory.com/68
Author And Source
이 문제에 관하여([Jenkins CI/CD] 3. Jar 파일을 클라우드 서버로 전달하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zayson/Jenkins-CICD-3.-Jar-파일을-클라우드-서버로-전달하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)