1️⃣ 이전글과 같이 프로젝트가 세팅이 되어있고, EC2 인스턴스가 실행중인 상태
2️⃣ Github Actions 코드 수정
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: JDK 17버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: application.yml 파일 만들기
run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
- name: 테스트 및 빌드하기
run: ./gradlew clean build
- name: 빌드된 파일 이름 변경하기
run: mv ./build/libs/*SNAPSHOT.jar ./project.jar
- name: SCP로 EC2에 빌드된 파일 전송하기
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: project.jar
target: /home/ubuntu/instagram-server/tobe
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
script: |
rm -rf /home/ubuntu/instagram-server/current
mkdir /home/ubuntu/instagram-server/current
mv /home/ubuntu/instagram-server/tobe/project.jar /home/ubuntu/instagram-server/current/project.jar
cd /home/ubuntu/instagram-server/current
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
rm -rf /home/ubuntu/instagram-server/tobe
1. Github Repository 파일 불러오기 - checkout 라이브러리 사용
2. JDK 17버전 설치 - setup-java 라이브러리 사용
temurin: OpenJDK 배포판 중 하나로, 널리 사용된다고 알려져있다
3. application.yml 파일 만들기
4. 테스트 및 빌드하기
5. 빌드된 파일 이름 변경하기
6. SCP로 EC2에 빌드된 파일 전송하기 - scp-action 라이브러리 사용
7. SSH로 EC2에 접속하기 - ssh-action 라이브러리 사용
이전에 포스팅했던 개인 프로젝트에서 많이 쓰는 CI/CD 구축 방법 방식과의 차이점
빌드된 파일을 EC2에 전송할 때 사용하는 SCP란 무엇일까 ?
SCP란 Secure Copy Protocol의 약자이고 네트워크를 통해 파일을 안전하게 복사하기 위한 프로토콜이다.
SSH(Secure Shell)을 기반으로 동작하며, 암호화를 사용하여 데이터를 안전하게 전송할 수 있다.
일반적으로 리눅스 또는 유닉스 시스템 간에 파일을 복사하거나, 서버에 파일을 업로드 할 때 사용한다.
1️⃣ 로컬에서 원격 서버로 파일 전송
scp exapmle.txt user@192.168.1.1:/home/user/
example.txt
: 전송할 파일user
: 원격 서버의 사용자 이름192.168.1.1
: 원격 서버의 IP 주소/home/user/
: 원격 서버에서 저장할 경로2️⃣ 원격 서버에서 로컬로 파일 복사
scp user@192.168.1.1:/home/user/example.txt /local/path/
example.txt
를 로컬 경로 /local/path/
로 복사3️⃣ 디렉토리 복사
scp -r /local/directory user@192.168.1.1:/home/user/
-r
옵션을 사용하여 디렉토리를 재귀적으로 복사할 수 있다(?)4️⃣ 포트를 지정하여 전송
scp -P 2222 example.txt user@192.168.1.1:/home/user/
-P
: SSH가 기본적으로 사용하는 포트 (22번) 외에 다른 포트를 지정할 수 있다