CI/CD(μ§μμ ν΅ν© λ° μ§μμ λ°°ν¬)λ μ ν리μΌμ΄μ μ μλμΌλ‘ λΉλ, ν μ€νΈ, λ°°ν¬νλ κ°λ° νλ‘μΈμ€λ₯Ό μλ―Ένλ€. GitHub Actionsλ₯Ό μ¬μ©νλ©΄ GitHub μ μ₯μμ Push λλ PR μ΄λ²€νΈκ° λ°μνμ λ μν¬νλ‘λ₯Ό μ€νν μ μλ€.
μ΄ λ¬Έμλ GitHub Actionsλ₯Ό κΈ°λ°μΌλ‘ ν CI/CDλ₯Ό μ§μ ꡬμΆνκ³ , λ΄ νλ‘μ νΈμ μ μ©νλ λ°©λ²μ λ¨κ³λ³λ‘ μ 리ν λ΄μ©μ΄λ€. 무μ€λ¨ λ°°ν¬μ νμν ꡬμ±κΉμ§ ν¬ν¨νμ¬ μμ±νμλ€.
.github/workflows
λλ ν 리μ YAML νμμΌλ‘ μν¬νλ‘λ₯Ό μμ±mkdir -p .github/workflows
cd .github/workflows
touch ci-cd.yml
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew build
- name: Copy files via SCP (λ°°ν¬ μλ² μ μ‘)
uses: appleboy/[email protected]
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
password: ${{ secrets.REMOTE_PASSWORD }}
port: 22
source: "build/libs/*.jar"
target: "~/app"
- name: Execute remote command (μλ² μ¬μμ)
uses: appleboy/[email protected]
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
password: ${{ secrets.REMOTE_PASSWORD }}
port: 22
script: |
pkill -f 'java -jar' || true
nohup java -jar ~/app/*.jar > ~/app/log.txt 2>&1 &
GitHub μ μ₯μ β Settings β Secrets and variables β Actions λ©λ΄μμ μλμ Key λ±λ‘
REMOTE_HOST
: λ°°ν¬ λμ μλ²μ IP λλ λλ©μΈREMOTE_USER
: SSH μ¬μ©μλͺ