Merge pull request #73 from UMC-TripPiece/ci/ci-cd #4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
' |