diff --git a/.gitea/workflows/kub-deploy.yml b/.gitea/workflows/kub-deploy.yml index c455ad0..4aad2d4 100644 --- a/.gitea/workflows/kub-deploy.yml +++ b/.gitea/workflows/kub-deploy.yml @@ -8,156 +8,65 @@ on: env: REGISTRY: 194.5.195.53:30080 IMAGE_NAME: admin/cms - NEXUS_URL: http://194.5.195.53:32081/repository/foursat-nuget-hosted/index.json - NEXUS_USER: admin - NEXUS_PASS: 87zH26nbqT K8S_SERVER: 194.5.195.53 jobs: - # Job 1: Pack and Push Protobuf packages - publish-packages: - runs-on: ubuntu-latest - container: - image: 194.5.195.53:32082/dotnet/sdk:9.0 - steps: - - name: Checkout code - run: | - git clone --depth 1 --branch kub-stage http://gitea-svc:3000/admin/CMS.git . - git log -1 --format="%H %s" - - - name: Pack and Push Protobuf packages - env: - CI: "true" - run: | - echo "📦 Looking for Protobuf projects..." - - # Find all Protobuf csproj files - PROTO_PROJECTS=$(find . -name "*Protobuf*.csproj" -type f) - - if [ -z "$PROTO_PROJECTS" ]; then - echo "⚠️ No Protobuf projects found" - exit 0 - fi - - echo "Found Protobuf projects:" - echo "$PROTO_PROJECTS" - echo "" - - # Pack and push each project - for proj in $PROTO_PROJECTS; do - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "📦 Processing: $proj" - - # Get project directory - proj_dir=$(dirname "$proj") - - # Restore first - echo " → Restoring..." - dotnet restore "$proj" - - # Build - echo " → Building..." - dotnet build "$proj" -c Release --no-restore - - # Pack without running PushToFoursatNuget target - echo " → Packing..." - dotnet pack "$proj" -c Release --no-build -o "$proj_dir/nupkg" -p:RunPushTarget=false - - # Push to Nexus manually (skip-duplicate will ignore if already exists) - echo " → Pushing to Nexus..." - for nupkg in $proj_dir/nupkg/*.nupkg; do - if [ -f "$nupkg" ]; then - dotnet nuget push "$nupkg" \ - --source "${{ env.NEXUS_URL }}" \ - --api-key "${{ env.NEXUS_USER }}:${{ env.NEXUS_PASS }}" \ - --skip-duplicate \ - --allow-insecure-connections && echo " ✅ Pushed: $(basename $nupkg)" || echo " ⏭️ Skipped (exists)" - fi - done - echo "" - done - - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "✅ All Protobuf packages processed!" - - # Job 2: Build and Deploy Docker image build-and-deploy: runs-on: ubuntu-latest - needs: publish-packages container: image: 194.5.195.53:32082/docker:latest options: --privileged steps: - - name: Start Docker daemon with insecure registry + - name: Start Docker daemon run: | mkdir -p /etc/docker cat > /etc/docker/daemon.json << 'DAEMON' { - "insecure-registries": ["194.5.195.53:30080", "194.5.195.53:32500", "194.5.195.53:32082", "gitea-svc:3000"], - "dns": ["0.0.0.0"] + "insecure-registries": ["194.5.195.53:30080", "194.5.195.53:32500", "194.5.195.53:32082"] } DAEMON - - # بدون اینترنت - فقط از cached images dockerd & - for i in $(seq 1 30); do - docker info >/dev/null 2>&1 && break || sleep 2 - done - docker info - - # بررسی وجود cached images - echo "📊 Available Docker images:" - docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}" | head -20 - - echo "" - if docker images | grep -q "mcr.microsoft.com/dotnet"; then - echo "✅ .NET images found" - else - echo "⚠️ WARNING: .NET images not found - build may fail" - fi - + for i in $(seq 1 30); do docker info >/dev/null 2>&1 && break || sleep 2; done + - name: Checkout code run: | git clone --depth 1 --branch kub-stage http://gitea-svc:3000/admin/CMS.git . - git log -1 --format="%H %s" + + - name: Publish Protobuf packages + run: | + echo "📦 Publishing Protobuf packages..." + docker run --rm -v $(pwd):/src -w /src \ + 194.5.195.53:32082/dotnet/sdk:9.0 sh -c ' + for proj in $(find . -name "*Protobuf*.csproj" -type f); do + echo "📦 $proj" + dotnet restore "$proj" + dotnet build "$proj" -c Release --no-restore + dotnet pack "$proj" -c Release --no-build -o "$(dirname $proj)/nupkg" + for nupkg in $(dirname $proj)/nupkg/*.nupkg; do + [ -f "$nupkg" ] && dotnet nuget push "$nupkg" \ + --source "http://194.5.195.53:32081/repository/foursat-nuget-hosted/index.json" \ + --api-key "admin:87zH26nbqT" \ + --skip-duplicate --allow-insecure-connections || true + done + done + ' + echo "✅ Protobuf packages done!" + - name: Build Docker Image run: | - # استفاده از cached base images (بدون دانلود) - DOCKER_BUILDKIT=0 docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \ - -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ - . + docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest . - name: Push to Registry run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ env.REGISTRY }} -u admin --password-stdin - docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest - + - name: Deploy to Kubernetes run: | - echo "🚀 Deploying to Kubernetes..." - - # Install kubectl - apk add --no-cache curl - curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl" - chmod +x kubectl && mv kubectl /usr/local/bin/ - - # Setup kubeconfig - mkdir -p ~/.kube - echo "${{ secrets.KUBECONFIG }}" | base64 -d > ~/.kube/config - - # Deploy - echo '🔄 Restarting deployment...' - kubectl rollout restart deployment/cms - - echo '⏳ Waiting for rollout...' - kubectl rollout status deployment/cms --timeout=180s - - echo '' - echo '✅ Deployment successful!' - kubectl get pods -l app=cms -o wide - - - name: Build and Push Complete - run: | - echo "🎉 Build, Push, and Deploy completed successfully!" - echo "📦 Image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" + apk add --no-cache openssh-client sshpass + export SSHPASS="${{ secrets.SERVER_PASSWORD }}" + sshpass -e ssh -o StrictHostKeyChecking=no root@${{ env.K8S_SERVER }} " + kubectl rollout restart deployment/cms + kubectl rollout status deployment/cms --timeout=180s + " + echo "✅ Deployed!"