sudo yum update -y
sudo yum install -y docker
sudo service docker start
docker pull jenkins/jenkins:lts
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
docker ps
docker exec -it --user root [CONTAINER ID] /bin/bash
cd /var/jenkins_home/secrets/
vim initialAdminPassword
http://<EC2 인스턴스 IP 주소>:8080
로 접속해서 Jenkins 설정을 시작한다.http://젠킨스ec2의IP:포트번호/github-webhook/
을 입력한다. 반드시 마지막 /
까지 입력해야한다.젠킨스 대쉬보드의 Jenkins 관리 > 플러그인 관리 를 클릭한다.
Available plugins에서 ssh를 검색하여 Publish Over SSH 플러그인을 설치한다.
다시 Jenkins 관리 > 시스템 설정을 클릭한다.
GitHub 영역에서 [Add GitHub Server] 를 클릭한다.
그리고 이름을 지정한 뒤, Credentials에서 Add를 클릭한다.
아래처럼 팝업이 나오면 도메인은 Global Credentials, Kind는 Username with password로 설정하고, username은 깃헙 로그인id, password는 위에서 발급하고 복사해뒀던 token 값을 적는다. id란에는 이 설정의 credential id를 새로 지어주는 것이다. 그리고 add를 클릭한다.
그리고 밑으로 내려서 Publish over SSH 영역으로 간다.
passphrase 값에는 ssh 비밀번호를 새로 입력하고, key 값에는 Springboot가 배포된 ec2에 접속할 때 쓰는 pem 파일을 vim 명령어로 열어서 -----BEGIN RSA PRIVATE KEY-----
부터 -----END RSA PRIVATE KEY-----
값까지 복사하여 붙여준다.
그리고 SSH Servers 영역에 추가를 눌러서 위와 같이 Hostname에 스프링부트가 배포된 ec2 서버의 ip와 username, remote directory를 적어준다.
./gradlew clean build
를 입력한다.Send build artifacts over SSH
를 선택 한 뒤, 이전에 설정한 ssh 이름을 선택한다.source files: 대상 ec2에 전달할 파일의 경로와 파일의 종류
remote directory: 대상 ec2에 생성하고 관리할 경로
exec command: 전달 후 실행할 명령어
cd ~
touch start_server.sh
vim start_server.sh
그리고 해당 파일에 아래와 같이 입력하고 저장한다.
REPOSITORY=/home/ec2-user/deploy
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f wemanage.*.jar)
echo " 현재 구동중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/*.jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
# 실행 권한 확인 및 부여
if [ ! -x "$REPOSITORY/nohup.out" ]; then
echo "> $REPOSITORY/nohup.out 실행 권한이 없으므로 추가합니다."
chmod +x $REPOSITORY/nohup.out
fi
# 이전 jar 파일 삭제
JAR_COUNT=$(ls -1 $REPOSITORY/*.jar | wc -l)
if [ $JAR_COUNT -gt 1 ]; then
PREV_JAR=$(ls -tr $REPOSITORY/*.jar | head -n 1)
echo "> 이전 jar 파일 삭제: $PREV_JAR"
rm -f $PREV_JAR
fi
vim nohup.out