여기까지
자 여기까지 우린 수동으로 AWS EC2에 업데이트해보는 과정부터
GitAction을 통해 Push할 시 자동으로 build를 실행하고 EC2에 업로드하는 방법까지 진행했다.
다음으로 할 것은 EC2에서 GitAction으로부터 받은 .jar 파일을 실행하는 내용이다.
다시 IntelliJ로 돌아가보자.
스크립트 수정
전체적인 순서는 아래와 같이 진행된다.
- 기존 jar 파일 삭제 처리(업로드 위치 구동위치 구분)
- 구동 위치: /home/${{ secrets.EC2_USER }}/server/web
- jar 파일 이동 (~/demo/*.jar -> ~/web/*. jar)
- 기존 서버 중단 -> kill 8080 port
- 서버 구동
먼저 스크립트가 실행 중이면 멈추도록 설정한다.
- name: SSH to EC2
uses: appleboy/ssh-action@v1.2.0
#1. 기존 jar 파일 삭제 처리(업로드 위치 구동위치 구분)
#2. 구동 위치: /home/${{ secrets.EC2_USER }}/server/web
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_KEY }}
script_stop: true
script: |
rm -rf /home/${{ secrets.EC2_USER }}/server/web
mkdir /home/${{ secrets.EC2_USER }}/server/web
mv /home/${{ secrets.EC2_USER }}/server/demo/springboot-aws.jar /home/${{ secrets.EC2_USER }}/server/web/springboot-aws.jar
먼저 여기까지 작성하고 잘 실행되는지 AWS에서 테스트해본다.

문제없이 잘 이동되었다.
이제 포트를 죽여보자!
sudo fuser -k -n tcp 8080 || true
끝에 true 값을 넣은 이유는 만약 8080 포트가 없을 시 위의 `script_stop` 과 충돌 나지 않기 위함이다.
그런 다음
- name: SSH to EC2
uses: appleboy/ssh-action@v1.2.0
# 기존 jar 파일 삭제 처리 및 실행
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_KEY }}
script_stop: true
script: |
rm -rf /home/${{ secrets.EC2_USER }}/server/web
mkdir /home/${{ secrets.EC2_USER }}/server/web
mv /home/${{ secrets.EC2_USER }}/server/demo/springboot-aws.jar /home/${{ secrets.EC2_USER }}/server/web/springboot-aws.jar
sudo fuser -k -n tcp 8080 || true
cd /home/${{ secrets.EC2_USER }}/server/web
nohup java -jar springboot-aws.jar > ./ouput.log 2>&1 &
rm -rf /home/${{ secrets.EC2_USER }}/server/demo
이렇게 마무리해준다. 이미 앞서 설명한 명령어들은 넘어가겠다.
마무리로 `rm -rf /home/${{ secrets.EC2_USER }}/server/demo` 로 삭제해 주며 마무리한다.
이제 확인해 보겠다.

아래와 같이 간단히 변경하고 Commit & Push를 하면...
성공

우리는 이제 Push 하는 것만으로도 AWS까지 Chill 하게 바꿀 수 있게 되었다.
+추가
과연 일부로 오류를 일으킨다면 어떻게 될까?
CI/CD간 단위 테스트를 진행해 보겠다.
`src/test/java/com.example.demodeploy/DemoDeployApplicationTests` 에 가서 코드를 추가해보자.
@Test
void contextLoads() {
int a = 1/0;
throw new RuntimeException("오류발생");
}
강제로 오류를 발생시켰다.
그리고 Push 하고 Action탭에 들어가면?

오류가 발생하였다. 오류 메세지는 test FAILED이며, 11번 라인에서 실패했다고 나온다.
그렇다면 `AWS ip:8080` 에선 어떨까?

문제없이 잘 나온다.
이 부분에서 알 수 있는건 Commit은 정상적으로 동작한다. 하지만 Build에 실패하면 AWS에는 반영이 되지 않는다.
현재 실행중인 EC2에는 영향을 끼치지 못하기 때문에 GitAction에서 Build하는 이유 중 하나이다.
다음 시간에는 RDS생성을 학습해보겠다.
'SK 루키즈 > Cloud' 카테고리의 다른 글
[Rookies 개발 2기] React + SpringBoot + MySql CI/CD (1) (1) | 2025.01.20 |
---|---|
[Rookies 개발 2기] 스프링부트 + GitAction + CI/CD (4) (2) | 2025.01.17 |
[Rookies 개발 2기] 스프링부트 + GitAction + CI/CD (2) (0) | 2025.01.17 |
[Rookies 개발 2기] VPC 기본 개념 및 설정 (0) | 2025.01.16 |
[Rookies 개발 2기] 스프링부트 + GitAction + CI/CD (1) (3) | 2025.01.16 |