일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법 (Github Actions, SCP)

유동우·약 15시간 전
0

CI/CD

목록 보기
3/3
post-thumbnail

언제 사용?

  • 현업에서 초기 서비스 구축시 많이 활용한다
  • Github Actions에서 빌드 작업을 진행하여, 운영중인 서버에 거의 영향을 끼치지 않는다
  • CI/CD 툴로 Githut Actions만 사용하여 인프라 구조가 복잡하지 않다

작업 흐름

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 구축 방법 방식과의 차이점

  • application.yml 파일을 Github Actions에서 생성
  • 테스트 및 빌드를 EC2가 아닌 Github Actions에서 진행한 후 빌드된 파일을 EC2에 전송

빌드된 파일을 EC2에 전송할 때 사용하는 SCP란 무엇일까 ?

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번) 외에 다른 포트를 지정할 수 있다
profile
효율적이고 꾸준하게

0개의 댓글