fix: deploy no swarm
Some checks failed
BCards Deployment Pipeline / Run Tests (push) Successful in 2s
BCards Deployment Pipeline / PR Validation (push) Has been skipped
BCards Deployment Pipeline / Build and Push Image (push) Successful in 7m38s
BCards Deployment Pipeline / Deploy to Release Swarm (ARM) (push) Has been skipped
BCards Deployment Pipeline / Deploy to Production (ARM - OCI) (push) Failing after 11s
BCards Deployment Pipeline / Cleanup Old Resources (push) Has been skipped
BCards Deployment Pipeline / Deployment Summary (push) Successful in 0s
Some checks failed
BCards Deployment Pipeline / Run Tests (push) Successful in 2s
BCards Deployment Pipeline / PR Validation (push) Has been skipped
BCards Deployment Pipeline / Build and Push Image (push) Successful in 7m38s
BCards Deployment Pipeline / Deploy to Release Swarm (ARM) (push) Has been skipped
BCards Deployment Pipeline / Deploy to Production (ARM - OCI) (push) Failing after 11s
BCards Deployment Pipeline / Cleanup Old Resources (push) Has been skipped
BCards Deployment Pipeline / Deployment Summary (push) Successful in 0s
This commit is contained in:
parent
32e6ec24e3
commit
644dbf0974
@ -412,11 +412,11 @@ jobs:
|
||||
echo "🔍 File content (sensitive data masked):"
|
||||
cat appsettings.Production.json | sed 's/"[^"]*_[0-9A-Za-z_]*"/"***MASKED***"/g'
|
||||
|
||||
- name: Deploy to Production Servers
|
||||
- name: Deploy to Production Swarm
|
||||
run: |
|
||||
echo "🚀 Deploying to production servers (ARM64)..."
|
||||
echo "🚀 Deploying to production Docker Swarm (ARM64)..."
|
||||
|
||||
# Configura SSH (igual ao QRRapido)
|
||||
# Configura SSH
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
|
||||
chmod 600 ~/.ssh/id_rsa
|
||||
@ -428,101 +428,48 @@ jobs:
|
||||
# Testa a chave SSH
|
||||
ssh-add ~/.ssh/id_rsa 2>/dev/null || echo "SSH key loaded"
|
||||
|
||||
# Upload configuration file to Server 1
|
||||
echo "📤 Uploading configuration to Server 1..."
|
||||
# Upload configuration and stack file to swarm manager
|
||||
echo "📤 Uploading files to Swarm manager..."
|
||||
scp -o StrictHostKeyChecking=no appsettings.Production.json ubuntu@141.148.162.114:/tmp/
|
||||
scp -o StrictHostKeyChecking=no deploy/docker-stack.yml ubuntu@141.148.162.114:/tmp/
|
||||
|
||||
# Deploy no Servidor 1 (ARM - OCI)
|
||||
# Deploy to Docker Swarm
|
||||
ssh -o StrictHostKeyChecking=no ubuntu@141.148.162.114 << 'EOF'
|
||||
echo "🔄 Atualizando Servidor 1..."
|
||||
set -e
|
||||
|
||||
# Create app config directory
|
||||
mkdir -p /home/ubuntu/bcards-config
|
||||
mv /tmp/appsettings.Production.json /home/ubuntu/bcards-config/
|
||||
echo "🔄 Updating Docker Swarm stack..."
|
||||
|
||||
# Remove containers bcards-infrastructure se existirem
|
||||
docker stop bcards-infrastructure bcards-test-app || true
|
||||
docker rm bcards-infrastructure bcards-test-app || true
|
||||
# Update Docker config with new appsettings
|
||||
echo "📝 Updating bcards-appsettings config..."
|
||||
|
||||
# Para o container BCards atual se existir
|
||||
docker stop bcards-prod || true
|
||||
docker rm bcards-prod || true
|
||||
# Remove old config (will fail if in use, that's ok - swarm will use it until update)
|
||||
docker config rm bcards-appsettings 2>/dev/null || echo "Config in use or doesn't exist, will create new one"
|
||||
|
||||
# Remove imagem antiga
|
||||
docker rmi ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest || true
|
||||
# Create new config with timestamp to force update
|
||||
CONFIG_NAME="bcards-appsettings-$(date +%s)"
|
||||
docker config create ${CONFIG_NAME} /tmp/appsettings.Production.json
|
||||
|
||||
# Puxa nova imagem
|
||||
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
# Update stack file to use new config name
|
||||
sed "s/bcards-appsettings/${CONFIG_NAME}/g" /tmp/docker-stack.yml > /tmp/docker-stack-updated.yml
|
||||
|
||||
# Executa novo container BCards
|
||||
docker run -d \
|
||||
--name bcards-prod \
|
||||
--restart unless-stopped \
|
||||
--network host \
|
||||
-e ASPNETCORE_ENVIRONMENT=Production \
|
||||
-e ASPNETCORE_URLS=http://+:8080 \
|
||||
-e MongoDb__ConnectionString="mongodb://admin:c4rn31r0@129.146.116.218:27017,141.148.162.114:27017/BCardsDB?replicaSet=rs0&authSource=admin" \
|
||||
-e MongoDb__DatabaseName="BCardsDB" \
|
||||
-e Logging__LogLevel__Default=Debug \
|
||||
-e Serilog__OpenSearchUrl="http://localhost:9201" \
|
||||
-v /home/ubuntu/bcards-config/appsettings.Production.json:/app/appsettings.Production.json:ro \
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
echo "🐳 Deploying stack to Swarm (rolling update, zero downtime)..."
|
||||
docker stack deploy -c /tmp/docker-stack-updated.yml bcards --with-registry-auth
|
||||
|
||||
# Debug: verificar configuração aplicada
|
||||
echo "🔍 Verificando configuração MongoDB no container..."
|
||||
docker logs bcards-prod | head -20 || echo "Container ainda iniciando..."
|
||||
echo "⏳ Waiting for service to update..."
|
||||
sleep 10
|
||||
|
||||
# Recarrega NGINX
|
||||
sudo nginx -t && sudo systemctl reload nginx
|
||||
# Show service status
|
||||
docker service ls --filter name=bcards_bcards-app
|
||||
docker service ps bcards_bcards-app --no-trunc --filter "desired-state=running" | head -10
|
||||
|
||||
echo "✅ Servidor 1 atualizado"
|
||||
EOF
|
||||
echo "🧹 Cleaning up standalone containers if they exist..."
|
||||
docker stop bcards-prod 2>/dev/null || echo "No standalone container to stop"
|
||||
docker rm bcards-prod 2>/dev/null || echo "No standalone container to remove"
|
||||
|
||||
# Upload configuration file to Server 2
|
||||
echo "📤 Uploading configuration to Server 2..."
|
||||
scp -o StrictHostKeyChecking=no appsettings.Production.json ubuntu@129.146.116.218:/tmp/
|
||||
# Clean up temp files
|
||||
rm -f /tmp/appsettings.Production.json /tmp/docker-stack.yml /tmp/docker-stack-updated.yml
|
||||
|
||||
# Deploy no Servidor 2 (ARM - OCI)
|
||||
ssh -o StrictHostKeyChecking=no ubuntu@129.146.116.218 << 'EOF'
|
||||
echo "🔄 Atualizando Servidor 2..."
|
||||
|
||||
# Create app config directory
|
||||
mkdir -p /home/ubuntu/bcards-config
|
||||
mv /tmp/appsettings.Production.json /home/ubuntu/bcards-config/
|
||||
|
||||
# Remove containers bcards-infrastructure se existirem
|
||||
docker stop bcards-infrastructure bcards-test-app || true
|
||||
docker rm bcards-infrastructure bcards-test-app || true
|
||||
|
||||
# Para o container BCards atual se existir
|
||||
docker stop bcards-prod || true
|
||||
docker rm bcards-prod || true
|
||||
|
||||
# Remove imagem antiga
|
||||
docker rmi ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest || true
|
||||
|
||||
# Puxa nova imagem
|
||||
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
|
||||
# Executa novo container BCards
|
||||
docker run -d \
|
||||
--name bcards-prod \
|
||||
--restart unless-stopped \
|
||||
--network host \
|
||||
-e ASPNETCORE_ENVIRONMENT=Production \
|
||||
-e ASPNETCORE_URLS=http://+:8080 \
|
||||
-e MongoDb__ConnectionString="mongodb://admin:c4rn31r0@129.146.116.218:27017,141.148.162.114:27017/BCardsDB?replicaSet=rs0&authSource=admin" \
|
||||
-e MongoDb__DatabaseName="BCardsDB" \
|
||||
-e Logging__LogLevel__Default=Debug \
|
||||
-e Serilog__OpenSearchUrl="http://localhost:9202" \
|
||||
-v /home/ubuntu/bcards-config/appsettings.Production.json:/app/appsettings.Production.json:ro \
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
|
||||
# Debug: verificar configuração aplicada
|
||||
echo "🔍 Verificando configuração MongoDB no container..."
|
||||
docker logs bcards-prod | head -20 || echo "Container ainda iniciando..."
|
||||
|
||||
echo "✅ Servidor 2 atualizado"
|
||||
echo "✅ Swarm stack updated successfully!"
|
||||
EOF
|
||||
|
||||
- name: Health Check Production
|
||||
|
||||
88
deploy/cleanup-standalone.sh
Normal file
88
deploy/cleanup-standalone.sh
Normal file
@ -0,0 +1,88 @@
|
||||
#!/bin/bash
|
||||
# Script para limpar containers standalone do BCards
|
||||
# Deve ser executado DEPOIS que o Swarm estiver rodando corretamente
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 Verificando containers standalone do BCards..."
|
||||
|
||||
# Lista de possíveis nomes de containers standalone
|
||||
STANDALONE_CONTAINERS=(
|
||||
"bcards-prod"
|
||||
"bcards-release"
|
||||
"bcards-app"
|
||||
)
|
||||
|
||||
# Verifica se o Swarm está rodando
|
||||
echo "✅ Verificando status do Docker Swarm..."
|
||||
if ! docker info | grep -q "Swarm: active"; then
|
||||
echo "❌ ERRO: Docker Swarm não está ativo neste servidor!"
|
||||
echo "Este script só deve ser executado em servidores do Swarm."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verifica se o serviço do Swarm está rodando
|
||||
echo "✅ Verificando serviço bcards_bcards-app no Swarm..."
|
||||
if ! docker service ls | grep -q "bcards_bcards-app"; then
|
||||
echo "❌ ERRO: Serviço bcards_bcards-app não encontrado no Swarm!"
|
||||
echo "Certifique-se de que o deploy do Swarm foi feito antes de executar este script."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Mostra status do serviço Swarm
|
||||
echo ""
|
||||
echo "📊 Status atual do serviço Swarm:"
|
||||
docker service ls --filter name=bcards_bcards-app
|
||||
echo ""
|
||||
docker service ps bcards_bcards-app --filter "desired-state=running" | head -10
|
||||
echo ""
|
||||
|
||||
# Verifica se há containers standalone rodando
|
||||
FOUND_CONTAINERS=false
|
||||
for container_name in "${STANDALONE_CONTAINERS[@]}"; do
|
||||
if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then
|
||||
FOUND_CONTAINERS=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$FOUND_CONTAINERS" = false ]; then
|
||||
echo "✅ Nenhum container standalone encontrado. Sistema está OK!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Lista containers encontrados
|
||||
echo "⚠️ Containers standalone encontrados:"
|
||||
for container_name in "${STANDALONE_CONTAINERS[@]}"; do
|
||||
if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then
|
||||
echo " - $container_name"
|
||||
docker ps -a --filter "name=^${container_name}$" --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
|
||||
# Pergunta confirmação
|
||||
read -p "🗑️ Deseja remover estes containers standalone? (sim/não): " -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Ss][Ii][Mm]$ ]]; then
|
||||
echo "❌ Operação cancelada pelo usuário."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Remove os containers
|
||||
echo "🧹 Removendo containers standalone..."
|
||||
for container_name in "${STANDALONE_CONTAINERS[@]}"; do
|
||||
if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then
|
||||
echo " Parando e removendo: $container_name"
|
||||
docker stop "$container_name" 2>/dev/null || true
|
||||
docker rm "$container_name" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "✅ Limpeza concluída!"
|
||||
echo ""
|
||||
echo "📊 Status final do serviço Swarm:"
|
||||
docker service ls --filter name=bcards_bcards-app
|
||||
echo ""
|
||||
docker service ps bcards_bcards-app --filter "desired-state=running" | head -10
|
||||
Loading…
Reference in New Issue
Block a user