diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml new file mode 100644 index 0000000..6176882 --- /dev/null +++ b/.github/workflows/ci-cd.yml @@ -0,0 +1,102 @@ +name: Labor-Lawbot CI/CD + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Grant execute permission for gradlew + run: chmod +x ./gradlew + + - name: Build with Gradle + run: ./gradlew build -x test + + - name: Run tests + run: ./gradlew test + + - name: Upload build artifact + uses: actions/upload-artifact@v3 + with: + name: labor-lawbot-jar + path: build/libs/*.jar + + deploy: + needs: build + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' + + steps: + - name: Download build artifact + uses: actions/download-artifact@v3 + with: + name: labor-lawbot-jar + path: artifact + + - name: List artifacts + run: ls -la artifact/ + + - name: Create lawbot.env file + run: | + echo "DATABASE_USERNAME=${{ secrets.DATABASE_USERNAME }}" > lawbot.env + echo "DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }}" >> lawbot.env + echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> lawbot.env + echo "OPENAI_API_URL=${{ secrets.OPENAI_API_URL }}" >> lawbot.env + echo "OPENAI_CHAT_MODEL=${{ secrets.OPENAI_CHAT_MODEL }}" >> lawbot.env + echo "ENCRYPT_KEY=${{ secrets.ENCRYPT_KEY }}" >> lawbot.env + echo "EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }}" >> lawbot.env + echo "EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}" >> lawbot.env + echo "SERVER_URL=${{ secrets.SERVER_URL }}" >> lawbot.env + echo "LEGAL_API_SERVICE_KEY=${{ secrets.LEGAL_API_SERVICE_KEY }}" >> lawbot.env + echo "LEGAL_API_OC_KEY=${{ secrets.LEGAL_API_OC_KEY }}" >> lawbot.env + echo "EMBEDDING_MODEL_PATH=${{ secrets.EMBEDDING_MODEL_PATH }}" >> lawbot.env + echo "LEGAL_DATA_AUTO_INIT=${{ secrets.LEGAL_DATA_AUTO_INIT }}" >> lawbot.env + + - name: Setup SSH key + uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Deploy to server + env: + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} + run: | + # SSH 호스트 키 검증 비활성화 + mkdir -p ~/.ssh + echo "StrictHostKeyChecking no" >> ~/.ssh/config + + # 애플리케이션 실행 스크립트 생성 + echo '#!/bin/bash' > deploy.sh + echo 'cd ${{ secrets.DEPLOY_PATH }}' >> deploy.sh + echo 'pkill -f "java -jar" || true' >> deploy.sh + echo 'nohup java -jar labor-lawbot-*.jar > app.log 2>&1 &' >> deploy.sh + echo 'echo "Application deployed and started"' >> deploy.sh + chmod +x deploy.sh + + # JAR 파일과 환경 변수 파일 전송 + scp artifact/*.jar ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:${{ secrets.DEPLOY_PATH }}/ + scp lawbot.env ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:${{ secrets.DEPLOY_PATH }}/ + scp deploy.sh ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:${{ secrets.DEPLOY_PATH }}/ + + # 배포 스크립트 실행 + ssh ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} 'bash -s' < deploy.sh