본문 바로가기
Project/SpringBoot

깃허브 액션에 대해서

by 꽃요미 2025. 1. 30.

* 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 실행

 

초록색 배경의 체크모양이 뜨면 성공한것이다 !