도찐개찐
[Jenkins] Spring boot War 내장 톰캣 배포 자동화 본문
0. 환경 체크
Gradle-7.6
openjdk-11
Jenkins Server : docker jenkins/jenkins:lts
Deployment Server : Docker openjdk:11-jdk
1. SSH Key(공개키) 발급 설정
Jenkins에서 Deployment서버로의 접근이 필요하다. 이때 바로 Jenkins 애플리케이션에 Deployment 서버의 Key 정보를 등록해줘야 접근이 가능하다.
- Deployment 서버로 접속을 위한 SSH 키 값을 생성하는 방법에 대해서 알아보자.
- 일단 key 를 생성하는것은 매우 간단하다. 아래의 명령어만 입력하면 키가 생성이 된다.
1) OpenSSH 버전 확인
$ ssh -V
OpenSSH_8.4p1 Debian-5+deb11u1, OpenSSL 1.1.1n 15 Mar 2022
OpenSSH 버전에 따라 공개키 방법을 다르게 할 수 있습니다.
2) 공개키 발급
본 포스팅에서는 "OpenSSH 8.8" 에서 권장 하는 "ECDSA" 타입으로 공개키를 발행 하는 방법으로 진행 하겠습니다.
$ ssh-keygen -t ecdsa -b 521 -m PEM
완료 후 ls 명령어를 통해 ~/.ssh 디렉토리안을 확인 해 보면
다음과같이 .ssh 디렉토리 안에 private key와 public key가 생성 된것을 확인 할 수 있습니다..
private key : id_ecdsa-02
public key : public key
Enter file in which to save the key : {key 파일 생성 경로}
Enter passphrase (empty for no passphrase) : {해당 키파일에 사용할 암호 불필요시 그냥 엔터}
Enter same passphrase again : {직전 입력한 키파일 암호 동일 하게 입력}
3) authorized_keys 파일 생성 및 권한 설정
~/.ssh/authorized_keys 파일이 존재 하지 않는 경우 하단 명령어를 통해 authorized_keys 파일을 생성해 주셔야 합니다.
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
4) authorized_keys 파일 public key 등록
$ scp ~/.ssh/id_ecdsa-02.pub ~/.ssh/authorized_keys
5) private key 확인 및 별도 복사
* 확인한 private key는 jenkins 관리를 통해 SSH 서버 등록시 사용 하게 됩니다.
$ cat id_ecdsa-02
2. 젠킨스 SSH Server 설정
1) Publish Over SSH 설치
젠킨스 Dashboard > Jenkins 관리 > Plugin 관리
설치 가능 목록에서 "Publish Over SSH" 검색 후 해당 플러그인 설치
2) SSH 서버 설정
젠킨스 Dashboard > Jenkins 관리 > 시스템 설정 >
스크롤 최 하단 "Publish over SSH" 확인 > SSH Servers 추가 >
SSH Server 설정 >
Name : {프로젝트 설정시 SSH 서버 검색에 활용 할 서버 이름}
Hostname : {Deployments 서버 주소}
Username : {접근하고자 하는 계정}
Remote Directory : {접근 후 서비스 배포를 위해 사용할 경로}
발급된 SSH key를 사용하기 위해 "Use password authentication, or use a different key" 체크
Passphrase / Password : {SSH key 발행시 "Passphrase" 값을 입력했다면 해당 폼 동일값 입력}
Path to key : {공개키 파일을 Jenkins 서버에 옮긴 후 사용하기 위해서 키파일 경로 입력}
Key : {SSH private key 값 붙여넣기}
설정 한 SSH Server 하단 "Test Configuration" 클릭 > Success 메세지 확인
3. Jenkins Gradle 환경 추가
젠킨스 Dashboard > Jenkins 관리 > Global Tool Configuration 설정 >
Gradle > Gradle installations > Add Gradle
name : {gradle 설정 명}
Install automatically > gradle 버전 설정 후 설정 저장
4. 프로젝트 배포 설정
Jenkins Dashboard > 배포 자동화 할 Jenkins 프로젝트 > 구성 >
Build Steps > Add build steps > "Invoke Gradle script" 2개 추가
아래와 같이 설정
같은 페이지 내 빌드 환경 > Send files or execute commands over SSH after the build runs >
Name : {2번 항목에서 설정한 SSH Server 명 선택}
Transfers : build/libs/*.war
Remove prefix : {Transfers 에서 입력된 경로에서 build/libs 경로 삭제}
Remote directory : {Transfers 대상파일을 SSH Server Home directory + Remote direct}
ex) 아래와 같이 설정시 => /home/sftp-test/service_server/target/*.war
Exec command : sh deploy.sh
deploy.sh 내용
#deploy.sh
echo "PID Check..."
CURRENT_PID=$(ps -ef | grep java | grep jenkins-test* | awk '{print $2}')
echo "Running PID: {$CURRENT_PID}"
if "$CURRENT_PID" [ -z CURRENT_PID ] ; then \
echo "Project is not running" \
else \
kill -9 $CURRENT_PID \
sleep 10
fi
JAVA=/usr/local/openjdk-11/bin/java
echo "Deploy Project...."
nohup $JAVA -jar /home/sftp-test/service_server/target/jenkins-test-0.0.1-SNAPSHOT.war >> /home/sftp-test/service_server/logs/jenkins-test.log 2>&1 &
echo "Done"
'Infra ------------------------- > 젠킨스' 카테고리의 다른 글
[Jenkins] Publish over SSH 인증시 BapPublisherException 오류 원인과 해결책 (0) | 2023.03.02 |
---|---|
[Jenkins] GitHub WebHook 연동(빌드 자동화) (0) | 2023.02.28 |
[Jenkins] 젠킨스 jdk 버전 11로 올리는 방법 (0) | 2023.02.24 |
[Jenkins] docker로 설치한 jenkins 업데이트 하기 (0) | 2023.02.24 |
[Jenkins] 맥환경 로컬 환경 git 등 외부 도메인 노출(ngrok) (0) | 2023.02.24 |