Jenkins 서버와 베포 서버는 각각 다른 ec2이다.
이번 시간에는 Jenkins를 이용한 자동 배포에 대해서 알아보자
Publish Over SSH 플러그인 설치
Jenkins 관리 -> 플러그인 관리로 들어가 주자
이제 설치 가능을 선택해주고 우측 상단에 있는 필터에 ssh을 입력 후 아래의 플러그인을 다운로드하여주자
ssh 연동
배포서버랑 Jenkins를 연동해주기 위해서 authorized_keys파일에 권한을 넣어줘야 한다.
$ sudo -u jenkins /bin/bash
$ cat /var/lib/jenkins/. ssh/github_ansible-in-action.pub
위와 같이 명령어를 입력해 Jenkins 키를 가져와서 복사한다. (아래의 빨간 부분을 복사하면 된다.)
이제 권한을 부여해보자
$ vi. ssh/authorized_keys
빨간색은 원래 있던 키이고 파란색은 Jenkins의 키이다.
빨간색은 ppk라고 생각하면 될 거 같다.
Publish over SSH
Jenkins 관리 -> 시스템 설정에 들어가자
시스템 설정 아래에 있는 Publish over SSH를 찾아서 오자
위와 같이 추가를 선택하자
그러면 아래와 같은 화면을 볼 수 있다.
- Name : SSH server 이름이다 원하는 것을 입력하자
- Hostname : 배포 서버 ip 혹은 도메인 이름을 입력 해주자
- Username : ec2에 접속할 수 있는 아이디를 적어주자 필자는 ec2-user이다
- Remote Directory : ssh 통신을 통해 파일을 전송받을 디렉터리 경로
위를 입력하고 고급을 눌러주면 아래와 같은 화면을 볼 수 있다.
- Passphrase/Password : ssh key를 통해 인증
- path to key : ssh key의 경로
- key : ssh private key를 직접 등록하는 항목
- port : ssh 포트는 기본 22이므로 바꾸지 말자
key 항목의 ssh private key는 아래의 명령어를 입력하면 볼 수 있다.
$ sudo -u jenkins /bin/bash
$ cat /var/lib/jenkins/. ssh/github_ansible-in-action
아래와 같이 입력하면 된다.
이제 저장을 해주자
Shell script 작성
이제 배포 서버 쪽으로 오자
먼저 Remote Directory에 입력한 대로 디렉터리를 만들어주자
필자는 /home/ec2-user/jenkins로 만들겠다
$ mkdir /home/ec2-user/jenkins
$ cd /home/ec2-user/jenkins
이제 방금 만든 디렉터리로 이동하자
이동한 다음 이제 쉘 스크립트를 작성할 시간이다.
$ vi./restart.sh
아래와 같이 입력 해주자
#!/bin/bash
kill -9 ${ps aux | grep java | grep <jar 파일> | awk '{print $2}' }
java -jar '<경로>/<jar 파일>' --Terminal=true
아래와 같이 생성된 것을 볼 수 있다.
필자는 build라는 디렉터리를 만들었으나 선택임으로 안 만들어도 된다.
이 이야기는 바로 뒤에서 하겠다.
지난번에 만들었던 item에 들어가서 구성에 들어가 주자
구성에 들어왔으면 빌드 후 조치에 오자
빌드 후 조치 추가를 선택한 다음 send build artifacts over ssh를 골라주자
위와 같은 모습을 볼 수 있다.
Name : 위에서 설정한 Publish over ssh에서 ssh server 항목의 Name과 동일한 것을 선택
Source files : 서버에 업로드할 파일을 선택하는 곳 필자의 경우 /var/lib/jenkins/workspace/Jenkins가 해당 item의 default 경로
Remove prefix : 파일 전송 시 source file에서 제거되는 prefix 필자의 경우 target을 입력함으로 target이 제거될 예정
Remote directory : 위에서 설정한 Publish Over SSH에서 입력한 remote directory 이후의 경로 필자의 경우는 위에서 언급한 build 디렉터리
Exec Commend : 전송이 완료된 후 실행되는 command restart.sh를 nohub으로 실행
$ sudo sh /home/ec2-user/jenkins/restart.sh
이제 저장을 하자
확인
저장을 하고 나서 좌측에 있는 Build Now를 클릭 해주자
빌드가 되면서 배포서버에 자동으로 빌드 후 배포가 되는 것을 볼 수 있다.
필자가 배포하고자 한 서비스가 베포 된 것을 볼 수 있다.
'Jenkins' 카테고리의 다른 글
[Jenkins]Jenkins port 변경 (0) | 2020.04.05 |
---|---|
[Jenkins] Jenkins Build Trigger (1) | 2020.04.05 |
[Jenkins] Jenkins 환경 설정 (0) | 2020.04.04 |
[Jenkins] Jenkins 자동 빌드 (0) | 2020.04.04 |
[Jenkins] Jenkins GitHub server 연동 (0) | 2020.04.04 |