Jenkins - Publish over SSH (feat. AWS EC2)

 많은 사람들이 알다시피, Jenkins 는 유용한 CI / CD 오픈소스 툴이다. 온프레미스 환경 및 클라우드 환경을 넘나들며 유용하게 사용할 수 있다. Jenkins 가 제공하는 수많은 기능들이 있다. 그 수 많은 기능들 중에 이번 글에서 정리할 내용은 Publish over SSH Plugin 이다.

기존에 이미 Jenkins 는 EC2 에 설치가 되어있고 배포 대상이 되는 EC2 도 있다는 전제하에 정리해보겠다. 

혹시라도 Jenkins 설치 방법이 궁금하다면 예전 글에서 정리한 것을 참고하길 바란다. https://infondgndg91.blogspot.com/2020/06/install-jenkins-in-aws-ec2.html


이번 글에서 무엇을 정리할 것인가 나열하겠다.

1. Github 에서 Source code 를 땡겨온다. ( 이번 글에서 Github 설정은 다루지 않는다. )

2. Gradle 로 Spring boot project 를 jar 로 빌드한다. ( 이번 글에서 Gradle 설정은 다루지 않는다. )

3. 빌드한 jar 를 Publish over SSH 플러그인을 통해서 Deploy EC2 에 전송한다.

4. Deploy EC2 에 있는 shell script 를 Jenkins EC2 에서 원격 호출한다.


우선, Publish over SSH 플러그인 부터 설치해보자. 아래는 해당 플러그인 공식 Documentation 이다.

https://plugins.jenkins.io/publish-over-ssh/

admin 으로 들어가든, 권한이 있는 계정으로 들어가자.

Jenkins 관리로 들어가자.


그리고, 플러그인 관리로 들어가자.

나는 이미 설치를 했기 때문에, 설치된 플러그인 목록에서 검색을 통해서 확인할 수 있다.
설치가 되지 않은 상태라면, 설치 가능 목록에서 Publish over SSH 검색 후 설치하면 된다.

플러그인 설치가 되었다면, 이제 시스템 설정으로 들어가자. 


들어가서, 스크롤을 맨 아래로 내리면 아래와 같은 영역을 확인할 수 있다.


먼저 각 필드에 대해 설명하겠다.
path to key 필드와 key 필드는 private key file 의 위치 혹은 private key 를 넣으면 된다.
path 의 경우에는 절대경로를 넣어주거나 혹은 JENKINS_HOME 경로를 기준으로 상대경로도 가능하다.

필자의 경우에는 key 필드만을 이용했다.

다음으로, 사진에서도 확인할 수 있듯이 Required 라고 빨간색으로 경고를 주고 있는 필드들에 대해 알아보자.

Name : 원격 서버에 대한 별칭을 임의로 지정하면 된다.
Hostname : 말 그대로 원격 서버의 hostname 을 기입한다. 도메인이 있다면 도메인을 없다면 IP 주소를 기입하면 된다.

Username : 일반적으로 AWS EC2 를 이용한다면 ec2-user 가 되겠다.
Remote Directory: 원격 서버의 기본 디렉토리 path 를 넣어주면 된다. 일반적으로 AWS EC2 를 이용한다면, /home/ec2-user 를 넣어주면 된다.

제대로 기입했고 작동하는지 확인하려면, 사진에 Test Configuration 이라는 버튼이 있다. 해당 버튼을 눌러서 성공하면 Success 라는 문구를 확인할 수 있다. Success 문구가 아니라 실패했다고 하면, 앞서 설명했던 필드중에 올바르지 않으니까 꼼꼼하게 하나씩 확인해야 한다.


자 그렇다면, 이제 플러그인 설정이 끝났다. 배포해보자.

새로운 Item 누른다.

Freestyle project 를 만들 것이다. 이름은 당신의 마음대로 ... 이미지에선 오타가 났다. 다시 찍기 귀찮아서 패스


소스 코드 관리 섹션과, 빌드 섹션은 해당 글에서 스킵하겠다.
이번 글에서 다루고 싶은 Publish over SSH 에 대해서만 다루겠다.

따라서 빌드 후 조치 섹션에서 아래와 같이 Send build artifacts over SSH 를 선택한다.

선택하면, 아래와 같은 화면을 확인할 수 있다.

먼저 Name 필드는 앞서 정리했던 환경 설정 부분을 제대로 했다면, 지정 했던 이름이 노출되어서 건드릴 부분이 없다.

Source files : Jenkins EC2 에서 Deploy EC2 로 옮길 파일을 기입해주는 영역이다. jar 의 경우 예를 들면, **/libs/*.jar

Exec command : Deploy EC2 에서 실행할 command 를 호출할 수 있다. 예를 들어 Deploy EC2 의 기본 경로에 test.sh 라는 쉘스크립트가 존재한다면, . test.sh 와 같이 기입할 수 있다.

Remove prefix 와 Remote Directory 는 Required 가 아니다. 보다 세밀한 조정이 필요하다면 활용하도록 하자.



Jenkins 프리스타일 프로젝트를 작성하는 과정에서 Git 설정과 Build 설정을 개인적인 정보 노출을 하지 않기 위해서 뛰어 넘었다.


아래는 생성한 Jenkins 프리스타일 프로젝트를 build 했을 때 정상적으로 성공한 로그이다. 기존 로그에서 노출되면 민감한 정보들은 수정하였다.

이번 글은 여기서 마치도록 하겠다.





댓글

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째