일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ci/cd
- k8s
- springboot
- Elastic Load Balancing
- codepresso
- TypeScript
- REPLICATION
- 코드프레소
- 아키텍처
- Jenkins
- Typesript
- kubernetes
- docker
- Auto Scaling Group
- AWS
- NoSQL
- ELB
- Redis
- ASG
- Today
- Total
Study Note
Github + Jenkins 연동과 Jenkins로 Build 후 ssh로 배포하기 2 본문
저번에는 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 코스를 수강하면서 작성한 글입니다.
'Jenkins' 카테고리의 다른 글
Github + Jenkins + Docker로 빌드 / 배포 자동화 (0) | 2020.04.05 |
---|---|
Github + Jenkins 연동과 Jenkins로 Build 후 ssh로 배포하기 1 (0) | 2020.02.22 |