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: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
DEST="$HOME/apps/sistema"
|
DEST="$HOME/apps/sistema"
|
||||||
mkdir -p "$DEST"
|
|
||||||
mkdir -p "$DEST/.next/static"
|
# SOLUCAO DEFINITIVA: Limpar completamente o destino usando Docker (root)
|
||||||
# Corrigir permissoes do destino (arquivos de deploys anteriores)
|
# Isso evita erros de permissao de arquivos criados por Docker em deploys anteriores
|
||||||
if [ -d "$DEST" ]; then
|
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 \
|
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
|
fi
|
||||||
# rsync com --no-owner --no-group para nao preservar UID do container Docker
|
echo "Diretorio limpo"
|
||||||
if [ -d "$EFFECTIVE_APP_DIR/.next/static" ]; then
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$DEST"
|
||||||
|
|
||||||
|
# Copiar build completo (sem conflitos de permissao agora)
|
||||||
rsync -a --no-owner --no-group \
|
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 '.pnpm-store' --exclude '.pnpm-store/**' \
|
||||||
--exclude '.next/static' \
|
|
||||||
"$EFFECTIVE_APP_DIR"/ "$DEST"/
|
"$EFFECTIVE_APP_DIR"/ "$DEST"/
|
||||||
|
|
||||||
echo "Published build to: $DEST"
|
echo "Published build to: $DEST"
|
||||||
|
|
||||||
- name: Swarm deploy (stack.yml)
|
- name: Swarm deploy (stack.yml)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue