diff --git a/.gitea/workflows/prod-deploy.yml b/.gitea/workflows/prod-deploy.yml index e84b6f7..7292713 100644 --- a/.gitea/workflows/prod-deploy.yml +++ b/.gitea/workflows/prod-deploy.yml @@ -8,81 +8,86 @@ on: env: REGISTRY: 194.5.195.53:30080 IMAGE_NAME: admin/cms + K8S_SERVER: 194.5.195.53 jobs: build-and-deploy: runs-on: ubuntu-latest container: - image: docker:latest + image: 194.5.195.53:32082/docker-sshpass:latest options: --privileged - env: - HTTP_PROXY: http://proxyuser:87zH26nbqT2@46.249.98.211:3128 - HTTPS_PROXY: http://proxyuser:87zH26nbqT2@46.249.98.211:3128 - NO_PROXY: localhost,127.0.0.1,gitea-svc,45.149.79.127,10.0.0.0/8 steps: - - name: Install dependencies - run: | - apk add --no-cache git curl - - # Install kubectl with fixed version - KUBECTL_VERSION="v1.31.0" - curl -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" - chmod +x kubectl - mv kubectl /usr/local/bin/ - - - 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:32082", "gitea-svc:3000"] + "insecure-registries": ["194.5.195.53:30080", "194.5.195.53:32500", "194.5.195.53:32082"] } DAEMON - mkdir -p ~/.docker - cat > ~/.docker/config.json << 'CONF' - { - "proxies": { - "default": { - "httpProxy": "http://proxyuser:87zH26nbqT2@46.249.98.211:3128", - "httpsProxy": "http://proxyuser:87zH26nbqT2@46.249.98.211:3128", - "noProxy": "localhost,127.0.0.1,gitea-svc,45.149.79.127,10.0.0.0/8" - } - } - } - CONF - dockerd & - for i in $(seq 1 30); do - docker info >/dev/null 2>&1 && break || sleep 2 + echo "🚀 Starting Docker daemon..." + dockerd --iptables=false --ip6tables=false --bridge=none --storage-driver=vfs & + + for i in $(seq 1 90); do + if docker info >/dev/null 2>&1; then + echo "✅ Docker daemon is ready (attempt $i)" + docker version + break + else + echo "⏳ Waiting for Docker daemon... (attempt $i/90)" + sleep 2 + fi done - docker info - + + if ! docker info >/dev/null 2>&1; then + echo "❌ Docker daemon failed to start after 3 minutes" + exit 1 + fi + - name: Checkout code run: | git clone --depth 1 --branch production http://gitea-svc:3000/admin/CMS.git . - git log -1 --format="%H %s" + + - name: Login to Docker registries + run: | + echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login 194.5.195.53:32082 -u admin --password-stdin + echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ env.REGISTRY }} -u admin --password-stdin + + - name: Publish Protobuf packages + run: | + echo "📦 Publishing Protobuf packages..." + docker run --rm --network host -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" --configfile src/NuGet.config + 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: | - docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \ - -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod \ - --build-arg HTTP_PROXY=http://proxyuser:87zH26nbqT2@46.249.98.211:3128 \ - --build-arg HTTPS_PROXY=http://proxyuser:87zH26nbqT2@46.249.98.211:3128 \ - . + DOCKER_BUILDKIT=0 docker build --network host -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \ + -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod . - 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 }}:prod - + - name: Deploy to Production run: | - # Setup kubeconfig for PRODUCTION - mkdir -p ~/.kube - echo "${{ secrets.KUBECONFIG_PROD }}" | base64 -d > ~/.kube/config - - # Restart deployment to pull new image - kubectl rollout restart deployment/cms || echo "Deployment doesn't exist yet" - - # Wait for rollout to complete - kubectl rollout status deployment/cms --timeout=5m || echo "Deployment rollout pending" + 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=300s + " + echo "✅ Deployed to Production!"