* GitHub Acitons : GitHub 저장소에서 CI/CD(Continuous Integration / Continuous Deployment)를 자동화할 수 있는 도구.
즉 코드 변경이 있을 때 빌드, 테스트, 배포 등의 작업을 자동으로 수행할 수 있도록 도와주는 기능.
1. GitHub Actions의 핵심 개념 : GitHub Actions는 이벤트 기반으로 동작. 즉, 특정 조건이 충족되면 자동으로 실행.
1) Workflow
- GitHub Acitons에서 실행되는 자동화 작업 단위.
- github/workflows/ 디렉터리에 yaml 파일로 저장됨.
2) Event ( 이벤트 )
- GitHub Actions가 언제 실행될지 결정하는 조건이다.
- Ex) push : 코드가 푸시될때 실행. pull_request : PR이 생성되거나 병합될 때 실행. schedule : 특정 시간마다 실행
3) Job ( 작업 )
- 하나의 워크플로우 안에서 여러 개의 Job(작업)을 정의할 수 있다. 병렬 실행 또는 순차 실행 가능.
4) Step ( 단계 )
- 단계는 작업 내 작업의 가장 작은 단위이다. 각 단계는 셸 명령을 실행하거나 작업을 실행할 수 있다. 단계는 워크플로 파일에 짖어된 순서대로 실행되며 각 단계는 동일한 실행기 인스턴스 내에서 실행됨.
5) Runner( 실행 환경 )
- GitHub Actions는 워크플로우를 실행하기 위해 실제 서버 제공.
- 기본적으로 GitHub에서 제공하는 linux, macOS, Window 환경에서 실행 가능.
아래는 깃허브 액션을 적용한 file 이다.
name: Deploy to EC2
on:
push:
branches:
- dev
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build with Gradle
run: ./gradlew clean bootJar
- name: Add EC2 host to known hosts
run: |
mkdir -p ~/.ssh
ssh-keyscan -p 30600 -H ${{ secrets.EC2_PUBLIC_IP }} >> ~/.ssh/known_hosts
env:
EC2_PUBLIC_IP: ${{ secrets.EC2_PUBLIC_IP }}
- name: Set up SSH
uses: webfactory/ssh-agent@v0.5.3
with:
ssh-private-key: ${{ secrets.EC2_SSH_KEY }}
- name: Copy Jar to EC2
run: |
scp -P 30600 build/libs/*.jar ubuntu@${{ secrets.EC2_PUBLIC_IP }}:~/quiz
- name: Restart server
run: |
ssh -p 30600 ubuntu@${{ secrets.EC2_PUBLIC_IP }} 'sudo systemctl restart quiz'
단계별 설명
- 최상단에 name 작성 : workflow의 이름을 설정해 주는 것
name: Deploy to EC2
-workflow를 실행시킬 Event정의 : 아래는 dev branch에 push이벤트가 일어날 때 라는 뜻
on:
push:
branches:
- dev
- Event에 부합했을때 실행 시킨 job 정의
jobs:
deploy:
runs-on: ubuntu-latest
- Step 정의
1) 각 Step마다 name정의 및 uses(마켓에 있는 action 가져오기)
2) run은 직접 명령어 실행
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- InteliJ의 .github의 workflow 디렉터리에 Deploy.yml 파일을 생성하여 위 같은 문법을 작성한다.
- 그리고 배포할 원본 Repo의 Git에 접속 - > Setting -> Secretes and Variable 클릭
- Repository Secret 기능에 Ec2 SSH 와 Ec2 Public Ip 2가지를 입력 후 저장
- Actions 탭 클릭하여 Deploy.yml 파일을 실행하면 GitHubActions 실행
초록색 배경의 체크모양이 뜨면 성공한것이다 !
'Project > SpringBoot' 카테고리의 다른 글
Java의 동시성 문제를 해결가능한 3가지 방법 (0) | 2025.02.12 |
---|---|
NginX를 적용한 로드밸런싱 적용 및 웹 소켓 로드 밸런싱 (0) | 2025.01.31 |
AWS 프로젝트 배포과정 (0) | 2025.01.31 |
인게임 유저 관리 ( 중복 계정, equals()와 hashcode() 오버라이드 ) (0) | 2025.01.05 |
DDL ( Data Definiton Language ) 작업 (0) | 2024.12.21 |