Functions/Publish-FlutterWebLegacy.ps1
|
<#
.SYNOPSIS Despliega la carpeta web generada al servidor remoto. .DESCRIPTION El cmdlet `Publish-FlutterWebLegacy` copia la carpeta web generada a un servidor remoto mediante SSH. Lee la configuración del host desde ~/.ssh/config y utiliza SSH y SCP directamente para transferir los archivos al servidor remoto. .PARAMETER server El nombre del servidor al que se desea desplegar la carpeta web. Este parámetro es obligatorio. .EXAMPLE Publish-FlutterWebLegacy -server "demo-web" Copia la carpeta web generada al servidor "demo-web". .NOTES Versión: 1.0.2 Autor: @ccisnedev #> function Publish-FlutterWebLegacy { param( [Parameter(Mandatory=$true)] [string]$server ) #version $version = "1.0.3" Write-Host "[$version] Publicando la carpeta web en el servidor '$server'..." -ForegroundColor Cyan # Obtener la versión y el nombre de la aplicación del pubspec.yaml $content = Get-Content -Path "./pubspec.yaml" # version $versionLine = $content | Where-Object { $_ -match "version:" } $version = ($versionLine -replace "version: ", "").Split('+')[0] # nombre $nameLine = $content | Where-Object { $_ -match "name:" } $name = $nameLine -replace "name: ", "" . "$PSScriptRoot/../Private/Read-SSHConfig.ps1" try { $sshConfig = Read-SSHConfig -HostAlias $server } catch { Write-Host "Servidor desconocido: $server" -ForegroundColor Red return } $username = $sshConfig.User $ip = $sshConfig.HostName $port = $sshConfig.Port $privateKeyPath = $sshConfig.IdentityFile # Variables de la carpeta de lanzamiento y el nombre de la carpeta web $webFolder = "app_${name}_v${version}_web" $localWebPath = "./release/$webFolder" # $destinationPath es temporal y específico para cada versión publicada $destinationPath = "/home/$username/frontend/$webFolder" #$remoteWebPath es la ruta fija donde siempre debe estar la web activa para el servidor. $remoteWebPath = "/home/$username/frontend/${name}_web" # Verificar si la carpeta web existe en local if (!(Test-Path -Path $localWebPath)) { Write-Host "La carpeta web '$localWebPath' no existe." -ForegroundColor Red return } else { Write-Host "La carpeta web '$localWebPath' encontrada." -ForegroundColor Green } Write-Host "Conectando al servidor '$server'..." -ForegroundColor Cyan # Comando SCP para copiar la carpeta web al servidor remoto $scpCommand = "scp -i ${privateKeyPath} -P ${port} -r ${localWebPath} ${username}@${ip}:${destinationPath}" Write-Host $scpCommand -ForegroundColor Cyan Write-Host "Desplegando la carpeta web '$localWebPath' al servidor '$server' en '$destinationPath'..." -ForegroundColor Cyan Invoke-Expression $scpCommand # Comando para conexion SSH al servidor $sshCommand = "ssh -i ${privateKeyPath} -p ${port} ${username}@${ip}" Write-Host "Script SSH: $sshCommand" -ForegroundColor Cyan # Los siguientes comandos están encerrados entre comillas simples para # asegurarse de que se pase correctamente al servidor remoto y no sean # evaluados localmente # "' comando '" # Cambiar los permisos de la carpeta en el servidor remoto $chmodCommand = "'chmod -R 775 ${destinationPath}'" Write-Host "Cambio de permisos: $chmodCommand" -ForegroundColor Cyan Invoke-Expression "$sshCommand $chmodCommand" # Verificar si ya existe la carpeta "web" y eliminarla si exite $checkAndRemoveCommand = "'if [ -d ${remoteWebPath} ]; then rm -rf ${remoteWebPath}; fi'" Write-Host "Verificar si existe y borrar $remoteWebPath" -ForegroundColor Cyan Invoke-Expression "$sshCommand $checkAndRemoveCommand" # Copia el contenido a la carpeta "${name}_web" $copyCommand = "'cp -r ${destinationPath} ${remoteWebPath}'" Write-Host "Copia: $copyCommand" -ForegroundColor Cyan Invoke-Expression "$sshCommand $copyCommand" # Enviar comando a la carpeta de nginx $rmCommand = "'sudo rm -rf /var/www/$name/*'" Write-Host "Borrando contenido de /var/www/$name" -ForegroundColor Cyan Invoke-Expression "$sshCommand $rmCommand" # Copiar el contenido de la carpeta web a la carpeta de nginx $copy2Command = "'sudo cp -r $remoteWebPath/. /var/www/$name/'" Write-Host "Copiando contenido de $remoteWebPath a /var/www/$name" -ForegroundColor Cyan Invoke-Expression "$sshCommand $copy2Command" Write-Host "Despliegue completado en el servidor '$server'." -ForegroundColor Green } |