정보
1. 전체적인 흐름
2. 장점
- 빌드 작업을 Github Actions에서 하기 때문에 운영하고 있는 서버 성능에 영향을 적게 줌
- CI/CD 틀로 Github Actions만 사용하기 때문에 인프라 구조가 간단
3. 단점
- 무중단 배포를 구현하거나 여러 EC2 인스턴스에 배포를 해야 하는 상황이라면 직접 Github Actions에 스크립트를 작성해서 구현해야 함. 이 직접 구현이 생각보다 복잡함.
4. 이 방법은 언제 사용하는 지?
- 현업에서 초기 서비스를 구축할 때 이 방법을 많이 활용
- 처음 서비스를 구현할 때는 대규모 서비스에 적합한 구조를 구현하지 않음. 즉 오버 엔지니어링을 하지 않는다. 확장의 필요상이 있다고 느끼는 시점에 인프라를 고도화하기 시작한다. 왜냐면 복잡한 인프라 구조를 갖추고 관리하는 건 생각보다 여러 측면에서 신경쓸 게 많아지기 때문이다.
- 인프라 구조를 변경할 때 시간이 많이 들어감.
- 에러가 발생했을 때 트러블 슈팅의 어려움
- 팀원이 인프라 구조를 이해하기 어려워 함
- 기능을 추가하거나 수정할 때 많은 시간이 들어감.
- 금전적인 비용이 더 많이 발생
- 처음 서비스를 구현할 때는 대규모 서비스에 적합한 구조를 구현하지 않음. 즉 오버 엔지니어링을 하지 않는다. 확장의 필요상이 있다고 느끼는 시점에 인프라를 고도화하기 시작한다. 왜냐면 복잡한 인프라 구조를 갖추고 관리하는 건 생각보다 여러 측면에서 신경쓸 게 많아지기 때문이다.
실습
1. 이전 실습했던 내용 정리
https://im-diary.tistory.com/113#%EC%8B%A4%EC%8A%B5-1
[CI/CD] 개인 프로젝트에서 많이 쓰는 CI/CD 구축 방법
1. 전체적인 흐름2. 장점git pull을 활용해서 변경된 부분의 프로젝트 코드에 대해서만 업데이트 하기 때문에 CI/CD 속도가 빠름. 대부분의 CI/CD 방식들은 전체 프로젝트를 통째로 갈아끼우는 방식을
im-diary.tistory.com
- 서버 종료: sudo fuser -k -n tcp 8080 || true
- 프로젝트 폴더 삭제: rm -rf /home/ubuntu/example-project/current
2. Github Actions 코드 수정
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Actions에 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/example-project/current
mkdir /home/ubuntu/example-project/current
mv /home/ubuntu/example-project/tobe/project.jar /home/ubuntu/example-project/current/project.jar
cd /home/ubuntu/example-project/current
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
rm -rf /home/ubuntu/example-project/tobe
'기타' 카테고리의 다른 글
[CI/CD] 확장성을 고려한 CI/CD 구축 방법2 - 실습 (0) | 2024.08.05 |
---|---|
[CI/CD] 확장성을 고려한 CI/CD 구축 방법 1 - 정보와 CodeDeply 셋팅 / IAM 설정 실습 (0) | 2024.08.04 |
[CI/CD] 개인 프로젝트에서 많이 쓰는 CI/CD 구축 방법 (0) | 2024.07.29 |
[CI/CD] 백엔드 CI/CD에 필요한 AWS 지식2 (1) | 2024.07.27 |
[오류] cannot open .git/FETCH_HEAD: Permission denied (0) | 2024.07.21 |