Skip to content

Merge pull request #73 from UMC-TripPiece/ci/ci-cd #4

Merge pull request #73 from UMC-TripPiece/ci/ci-cd

Merge pull request #73 from UMC-TripPiece/ci/ci-cd #4

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [ develop ]
jobs:
deploy:
runs-on: ubuntu-22.04
steps:
# JDK 17 설치
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: '17'
# 소스 코드 체크아웃
- name: Checkout repository
uses: actions/checkout@v2
# application.yml 생성 및 Secrets 내용 반영
- name: Make application.yml
run: |
cd ./src/main/resources
touch application.yml
echo "${{ secrets.APPLICATION_YML }}" > ./application.yml
shell: bash
# Gradle 빌드 수행
- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew clean build -x test
# EC2에 jar 파일 전송 및 배포
- name: Deploy to EC2
env:
PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }}
HOST: ${{ secrets.EC2_HOST }}
USER: ubuntu
run: |
echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
# EC2에 애플리케이션 디렉터리 생성 (sudo 권한 사용)
ssh -i private_key -o StrictHostKeyChecking=no ${USER}@${HOST} '
if [ ! -d "/opt/myapp" ]; then
sudo mkdir -p /opt/myapp && sudo chown ${USER}:${USER} /opt/myapp;
fi
'
# JAR 파일 빌드 경로 확인
ls -l build/libs
# JAR 파일이 제대로 빌드되고 있는지 확인
JAR_FILE=$(ls build/libs/*SNAPSHOT.jar | head -n 1)
echo "Deploying $JAR_FILE"
# JAR 파일 전송
scp -i private_key -o StrictHostKeyChecking=no "$JAR_FILE" ${USER}@${HOST}:/opt/myapp/app.jar
# EC2에서 systemd 서비스 파일 생성
ssh -i private_key -o StrictHostKeyChecking=no ${USER}@${HOST} '
echo "[Unit]
Description=MyApp Service
After=network.target
[Service]
User=${USER}
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
Restart=always
[Install]
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl enable myapp
'
# 애플리케이션 배포
ssh -i private_key -o StrictHostKeyChecking=no ${USER}@${HOST} '
sudo systemctl stop myapp || true
sudo systemctl start myapp
'