Pesquisa de site

Como configurar implantações automatizadas em seus servidores com Visual Studio e FTP


O Visual Studio tem opções para publicar automaticamente seu build de lançamento em servidores remotos por FTP. Isso pode ser muito útil se você estiver implantando alterações com frequência ou testando em um ambiente remoto. Mostraremos como configurá-lo e falaremos sobre como ele funciona.

Publicação via FTP

O FTP é um protocolo antigo e geralmente inseguro, mas, desde que seu servidor FTP suporte as extensões modernas do FTPS, que usa criptografia TLS, tudo bem. Você também pode fazer o chroot de seus usuários de FTP para que eles possam gravar apenas no diretório de destino.

Você pode ler nosso guia para configurar um servidor FTP para saber mais. Você deve certificar-se de que o FTPS esteja configurado e que o FTP normal esteja desativado.

Nem todos os tipos de compilações são suportados, no entanto. As bibliotecas de classes, por exemplo, não têm opções para publicar. Os aplicativos ASP.NET Core têm suporte melhor e têm opções para publicar no Azure e no Docker.

Felizmente, para os aplicativos que não têm suporte, você mesmo pode conectá-lo, pois o Visual Studio também oferece opções para executar scripts do PowerShell pós-compilação. Eles serão executados na compilação em vez de na publicação, mas você pode simplesmente configurar um perfil de compilação publicado personalizado com configurações de versão copiadas.

Você pode usar esses scripts de pós-compilação para fazer transferências FTP ou SCP, ou até mesmo para se conectar a serviços externos como AWS S3 ou um Docker Registry.

Configurando o Visual Studio

Em build, você verá uma opção para publicar sua solução. Se você não vir isso, precisará pular para a opção de backup de usar scripts pós-compilação.

Você precisará criar um novo perfil de publicação ou editar o padrão. Selecione Servidor FTPS, embora você possa publicar no Azure, Docker, uma pasta local ou implantação na Web do IIS, se funcionar melhor para você.

Insira os detalhes da conexão. Você precisará fornecer um URL, um caminho para onde ele será carregado e um nome de usuário/senha.

Em seguida, clique em publicar e você deverá vê-lo sendo transferido no console após a conclusão da compilação. Caso contrário, você receberá um erro ou um arquivo de log onde poderá solucionar o problema.

Configurando scripts pós-compilação para outros aplicativos

As opções integradas do Visual Studio são ótimas, mas quando não funcionam, você precisará fazer alguns scripts. Clique com o botão direito do mouse em seu projeto e selecione “Propriedades”:

Em seguida, em “Build Events”, você pode configurar um comando pós-compilação. Observe que isso é cmd, portanto, você precisará chamar manualmente o PowerShell, e isso também tem como escopo a pasta de saída da compilação; portanto, se você estiver armazenando o script do PowerShell na raiz do seu projeto, talvez seja necessário fazer referência coloque alguns diretórios acima com .......

Defina-o para ser executado após a compilação e você pode escolher se deseja executar o script sempre, sempre que for bem-sucedido ou sempre que a compilação for atualizada. Se você estiver reiniciando servidores ou algo assim, você só vai querer executar o script quando ele for atualizado. Caso contrário, selecione “na compilação bem-sucedida”, a menos que você tenha um motivo para executar o script quando a compilação falhar.

O PowerShell não possui suporte integrado para FTP. Você tem duas opções: usar o PowerShell Remoting sobre SSH para transferir para um servidor Linux ou usar uma biblioteca do PowerShell para FTP.

$s = New-PSSession -HostName 123.123.123.123 -UserName ubuntu
Copy-Item .example.txt /home/ubuntu -ToSession $s

Se você precisar usar o FTP, o WinSCP pode lidar com a transferência com bastante facilidade.

Add-Type -Path "WinSCPnet.dll"
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.ParseUrl("ftp://username:password@example.com/")

$session = New-Object WinSCP.Session
$session.Open($sessionOptions)

$session.PutFiles("c:source*", "/destination/").Check()

$session.Dispose()

Em ambos os casos, você precisará certificar-se de que seu script tenha referências corretas para os locais de arquivo apropriados. Se você clicar em “Edit Post-Build”, verá uma janela listando todas as variáveis que você pode passar para o seu script.

Artigos relacionados: