11.배포 자동화
젠킨스가 빌드한 결과물(demo-1.0.0-snapshot.jar)을 운영 서버인 스프링 애플리케이션이 배포된 EC2 서버에 전달(Delivery)해야함
빌드 결과물을 전달하기 위해서는 SSH 플러그인이 설치되어 있어야 함
1. 젠킨스에서 스프링 서버가 설치된 EC2에 접근하기 위해 젠킨스에 SSH 플러그인 설치
Jenkins → System Configuration → Plugins 탭 선택
좌측 Available plugins 선택
SSH Agent 검색 후 설치(install)
SSH Agent 플러그인 설치 되었으면 젠킨스 재시작(Restart)
하단 ‘설치가 끝나고 실행 중인 작업이 없으면 Jenkins 재시작’ 체크박스 선택
자동으로 재실행이 되지 않을 경우 jenkins 컨테이너 재시작하기
젠킨스 서버에서 스프링 서버로 접근하기 위한 다른 방법
.pem키를 젠킨스 서버에 두고 해당 키를 사용하여 접근
2. Jenkins 서버에서 스프링 서버로 접속하기 위한 EC2 SSH 키 추가
Jenkins 관리 → Credentials → Stores scoped to Jenkins 탭에서 System 하이퍼링크 클릭
Global credentials 클릭 → 우측 상단 Add Credentials 선택(Add domain 아님)
Kind
SSH Username with private key
Scope
Global
Username
ubuntu (linux 계정이름)
Password
스프링 EC2 서버에 접속할 때 사용하던 pem 키의 값(하단 pem 키 조회 참조)
ID
from-jenkins-to-aws-ec2-access-key
Description
access-key-for-spring-ec2-server
Treat username as secret 체크
Private Key 탭 하단
Enter directly 선택
Key 부분 하단 Add 버튼 누른 후 spring-ec2 서버에 연결할 때 사용되는 pem 키의 내용 입력 후 저장
3. pem 키 정보를 추가하기 위해 pem 키 조회
pem 키가 있는 폴더에서 shell 에디터 실행 후 cate 명령어로 pem 내부 키값 조회
cat {key이름}.pem—BEGIN 부터 —끝까지 전체 복사 후 붙여넣기
4. 운영 서버로의 자동 배포를 위한 파이프라인 스크립트 작성
ssh를 통해 접속할 ubuntu ip 주소는 private ip 사용,
하단 스크립트에서 {스프링 EC2 private IP주소}와 같은 주소 입력 부분의 경우 { } 기호는 지우고 작성해야 함
stage('Deploy') {
steps {
sshagent(credentials: ['from-jenkins-to-aws-ec2-access-key']) {
sh '''
ssh -o StrictHostKeyChecking=no ubuntu@{스프링 EC2 private IP주소} uptime
scp /var/jenkins_home/workspace/my-first-pipeline/build/libs/demo-0.0.1-SNAPSHOT.jar ubuntu@{스프링 EC2 private IP주소}:/home/ubuntu/mydemo
ssh -t ubuntu@{스프링 EC2 private IP주소} chmod +x ./deploy.sh
ssh -t ubuntu@{스프링 EC2 private IP주소} ./deploy.sh
'''
}
}
}