name: Deploy to OCIWP on: push: branches: - main - master workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v4 - name: Sync Code to Host Volume run: | echo "Copying latest code to /app (Host Volume)..." cp -a . /app/ - name: Deploy Task on Host run: | echo "Starting Standard CI/CD Deploy pipeline..." # 1. gradle 공식 이미지로 바로 컴파일 빌드! docker run --rm \ -v /home/ubuntu/app/ax_hub_mcp_tool:/app \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/ubuntu/.gradle:/home/gradle/.gradle \ -w /app \ gradle:8-jdk21 \ ./gradlew bootJar -x test # 2. 빌드 결과 plain jar 아카이브 정리 find /app -name "*-plain.jar" -delete # 3. 좀비 컨테이너 청소 (현재 우리가 쓸 포트를 점유 중인 옛날 컨테이너들만 정확히 색출해서 사살) echo "Finding and killing zombie containers holding our ports..." for port in 6379 8080 8089 8281 8282 8283 8284 8285 8288; do cid=$(docker ps -q --filter "publish=$port") if [ ! -z "$cid" ]; then echo "Force killing container $cid using port $port" docker rm -f $cid fi done # 4. 마운트된 /app 디렉토리로 이동하여 호스트의 도커 컴포즈 제어! cd /app docker system prune -f ACTIVE_PROFILE=dev docker compose down ACTIVE_PROFILE=dev docker compose up -d --build gateway redis mci-mock dozzle tool-sms tool-other # 5. 배포 후 대롱대롱 매달려 있는 가비지 이미지 자동 소거 청소! docker image prune -f echo "CI/CD Deploy Success!"