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: 옵션을 넣어줘야 합니다.)