GitHub Action으로 CI/CD

2024. 7. 11. 22:52개발노트

WorkFlow 생성

 

GitHub 프로젝트 생성 후 Actions 탭으로 이동해 "New workflow" 버튼을 눌러 WorkFlow를 생성합니다.

 

배포하고자 하는 프로젝트언어와 같거나 비슷한 workflow를 찾습니다.

없으면 "set up a workflow yourselg"를 클릭해 직접 만들면 됩니다.

 

배포 파일 생성

파일은 .github/worflows 아래 만들어지게 됩니다.
직접 작성한 YML 파일의 예는 아래와 같습니다.

name: Deploy to Raspberry Pi

on:
  workflow_dispatch:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-java@v4
      with:
        distribution: 'temurin' # See 'Supported distributions' for available options
        java-version: '21'

    - name: Build with Gradle
      run: ./gradlew build

    - name: Rename jar file
      run: mv ./build/libs/csv-to-json-0.0.1-SNAPSHOT.jar ./app.jar

        
    - name: SCP Jar to server
      uses: appleboy/scp-action@v0.1.7
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.NAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        source: "app.jar,deploy.sh"
        target: /www/csv-to-json
      
        
    - name: SSH to server and deploy
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.NAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        script: |
          chmod +x /www/csv-to-json/deploy.sh
          sh /www/csv-to-json/deploy.sh

 

푸시 브랜치를 master로 해서 master에 커밋 시 자동으로 실행 되도록 했습니다.

Java 21 으로 프로젝트를 만들었기 때문에 같은 버전으로 빌드를 돌려주도록 했습니다.

만들어진 jar파일은 "appleboy/scp-action"을 사용해서 대상 서버로 jar파일과 배포 스크립트를 전송합니다.

이 후 "appleboy/ssh-action"을 사용해 deploy.sh 스크립트를 실행해 배포를 완료합니다.

 

Secrets Key/Value 등록

위 내용에서 보이는 ${{ secrets.xxx }} 와 같은 키들은 Settings 탭에서 Secrets and variables > Actions 에서 등록 가능합니다.

 

배포 실행

배포 성공/실패 시 아래와 같이 Actions에서 확인 가능하며

Run workflow > Run workflow로 수동 배포가 가능합니다.

(수동 배포를 하기 위해서는 workflow_dispatch: 옵션을 넣어줘야 합니다.)