fix(ci): solucao definitiva para erro de permissao no rsync
Some checks failed
Some checks failed
O problema: Docker cria arquivos como root durante o build, e em deploys subsequentes o rsync falha com "Permission denied" porque o usuario runner nao consegue sobrescrever arquivos de root. A solucao anterior (chown do destino) falhava silenciosamente porque alguns arquivos ja tinham permissoes de root de deploys anteriores. Nova abordagem: - Antes do rsync, limpar completamente o destino usando Docker Alpine - Docker Alpine roda como root e consegue remover qualquer arquivo - O .env eh preservado (backup/restore) - rsync copia para diretorio limpo, sem conflitos de permissao 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
12a809805e
commit
6943a88e66
1 changed files with 22 additions and 11 deletions
|
|
@ -193,22 +193,33 @@ jobs:
|
|||
run: |
|
||||
set -e
|
||||
DEST="$HOME/apps/sistema"
|
||||
mkdir -p "$DEST"
|
||||
mkdir -p "$DEST/.next/static"
|
||||
# Corrigir permissoes do destino (arquivos de deploys anteriores)
|
||||
|
||||
# SOLUCAO DEFINITIVA: Limpar completamente o destino usando Docker (root)
|
||||
# Isso evita erros de permissao de arquivos criados por Docker em deploys anteriores
|
||||
if [ -d "$DEST" ]; then
|
||||
echo "Limpando diretorio destino: $DEST"
|
||||
# Preservar apenas o .env (configuracoes de producao)
|
||||
if [ -f "$DEST/.env" ]; then
|
||||
cp "$DEST/.env" /tmp/.env.backup
|
||||
fi
|
||||
# Remover tudo usando Docker Alpine como root
|
||||
docker run --rm -v "$DEST":/target alpine:3 \
|
||||
chown -R 1000:1000 /target 2>/dev/null || true
|
||||
sh -c 'rm -rf /target/* /target/.[!.]* /target/..?* 2>/dev/null || true'
|
||||
# Restaurar .env
|
||||
if [ -f /tmp/.env.backup ]; then
|
||||
cp /tmp/.env.backup "$DEST/.env"
|
||||
rm /tmp/.env.backup
|
||||
fi
|
||||
# rsync com --no-owner --no-group para nao preservar UID do container Docker
|
||||
if [ -d "$EFFECTIVE_APP_DIR/.next/static" ]; then
|
||||
echo "Diretorio limpo"
|
||||
fi
|
||||
|
||||
mkdir -p "$DEST"
|
||||
|
||||
# Copiar build completo (sem conflitos de permissao agora)
|
||||
rsync -a --no-owner --no-group \
|
||||
"$EFFECTIVE_APP_DIR/.next/static/" "$DEST/.next/static/"
|
||||
fi
|
||||
rsync -a --delete --no-owner --no-group \
|
||||
--exclude '.pnpm-store' --exclude '.pnpm-store/**' \
|
||||
--exclude '.next/static' \
|
||||
"$EFFECTIVE_APP_DIR"/ "$DEST"/
|
||||
|
||||
echo "Published build to: $DEST"
|
||||
|
||||
- name: Swarm deploy (stack.yml)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue