CI/CD #9. Jenkins 자동빌드/자동배포 (SSH 원격접속)
개요
Jenkins 자동빌드/자동배포 (SSH 원격접속)
Jenkins Deploy
이전 포스팅에서는 webhook을 통해 git push시 jenkins빌드를 유발하고 jenkins서버에 빌드 결과물 앱을 실행시키는 방법에 대해 알아봤다. 하지만 실제 환경에서는 우리가 빌드한 결과물을 구동할 곳이 jenkins서버가 아닌 운영/개발 배포서버일 것이기에, 이번포스팅에서는 jenkins빌드 후 SSH를 이용하여 원격 서버에 결과물을 배포 및 실행시키고자한다.
전제조건
※ 다음중 하나라도 갖춰져있지 않을 경우, 실습과정에서 에러가 발생할 가능성이 높습니다 :(
- gitlab 저장소(Maven 빌드 가능한 소스 권장)
- Jenkins 서버와 (Admin 권한 권장)
- Jenkins 환경설정 (플러그인, JDK, Git, Maven 설정)
- Jenkins & Gitlab 연동 (Gitlaba Access Token 발행)
- Jenkins 프로젝트 구성(Item 생성 및 설정)
- Build now시 정상빌드여부 확인
- gitlab webhook 설정 및 정상여부 확인
- 원격 배포서버 준비(AWS EC2나 온프레미스 서버 등)
1. 원격 배포 서버 설정
SSH 접속 시 배포할 폴더 생성
$ mkdir deploy_test
2. Jenkins 플러그인 설치 및 시스템 설정
젠킨스관리 > 시스템 설정 > Publish over SSH 항목에서 SSH Servers 추가버튼 클릭
아래내용을 채워준후 우측하단에 고급 버튼 클릭
- Name : 원격서버이름 임의 기입
- Hostname : 서버 IP 기입
- Username : 접속하여 작업할 계정 기입
- Remote Directory : 앞서 생성했던 원격접속 시 배포할 폴더 경로 기입
'Use password authentication, or use a different key' 체크박스를 클릭 후 서버의 비밀번호 혹은 SSH 키값을 입력한다. 필자의 경우 서버 root 패스워드를 알고있기때문에 패스워드를 기입했다. AWS EC2와같은 IaaS로 실습을 할 경우는 제공받은 SSH Key를 Key에 입력하면 된다.
다음 우측하단의 'Test Configuration' 버튼을 클릭하여 정상적으로 연결되는지 확인한다. 아래와같이 'Success'가 표시되면 정상인 것으로 간주한다.
3. 신규 아이템 생성
디플로이용 신규 아이템을 생성한다. 필자의 경우는 사전에 maven build 테스트용으로 만들었던 아이템을 복제하여 만들었다.
기존에 존재했던 아이템을 복사한경우, 빌드 후 조치(Post build task) 삭제한다. 이후 빌드 후 조치 추가 버튼을 누르고 Send build artifacts over SSH를 선택
위에서 만들어 놓은 Remote Server를 SSH Server로 선택하고 아래 Transfer 란을 채워준다.
Transfer에 대한 설명
- Source files : 원격서버로 전송할 파일 및 폴더 (필자는 target폴더 이하에 있는 모든 폴더 및 파일을 전송하게 설정)
- Remote prefix : 전송 시 삭제할 접두사 (예를들어 target/~~.jar 인 경우에 Remote prefix에 target을 기입하면 ~~.앞에 target폴더의 경로는 삭제되고 jar만 전송이 된다.)
- Remote directory : 원격 서버로 전송 시 전송될 파일들이 생성될 폴더명 (Remote directory가 없는경우, SSH Server에 기본적으로 설정되어 있는 원격지에 폴더로 감싸지지않고 파일이 그대로 전송된다. 이곳에 별도 기입했는데 실제 해당 서버에 폴더가 없는경우는 만들어진다.)
위와 같이 설정하면 /root/deploy_test/hotdeploy/CICDTEST-0.0.1-SNAPSHOT.jar 이 만들어진다. 저장 후 빌드를 통해 원격서버로 잘 전송 되는지, 그리고 해당 어플리케이션이 잘 반응하는지 확인해보자.
4. Build Now
이번 테스트는 webhook을 통해 빌드하지 않고 바로 'build now'를 클릭하여 확인한다. (webhook 기능을 사용하고 싶다면 앞선 포스팅을 참고하여 해당 item에 위와 동일한 설정들을 해주면 된다.) 바로 이전 포스팅에서 만든 item에 webhook에 대한 설정을 했고 현재 해당 item을 복사한 상태라 webhook을 유발하면 두 item에서 빌드가 발생될 것이다.
뭐, 사실 gitlab에서 webhook유발해도 어플리케이션이 구동하는 위치와 배포 위치 역시 다르기때문에 충돌하는 일은 없지만 불필요한 빌드를 막기위해 webhook 트리거 없이 build now를 실행해본다.
아래 그림에서 build now를 클릭하여 빌드 시 정상적으로 원격서버로 넘어가는지 확인한다.
브라우저에 원격서버의 ip와 실행되고 있는 port번호를 입력하여 정상적으로 구동중인지 확인하면 완료!
'System Engineering > CI, CD' 카테고리의 다른 글
CI/CD #11. Jenkins(젠킨스)와 Sonarqube(소나큐브) 연동 (0) | 2021.06.09 |
---|---|
CI/CD #10. CentOS7 Sonarqube(소나큐브) 설치 (0) | 2021.06.08 |
CI/CD #8. Gitlab Webhook으로 Jenkins 빌드 유발하기 (0) | 2021.06.07 |
CI/CD #7. Gitlab과 Jenkins Maven 빌드 설정 (0) | 2021.06.06 |
CI/CD #6. Git과 Git 호스팅 서비스에 대한 정리 (0) | 2021.06.06 |
댓글