Deploy - Plasfran UI
Este documento descreve o processo de build e deploy automático do projeto Plasfran UI para o ambiente de produção, utilizando GitHub Actions.
Requisitos
- Projeto em
.NET 8.0 - Branch de produção:
master - Acesso SSH ao servidor
- Secrets configuradas no repositório:
SSH_HOST_PROD: Endereço do servidor remotoSSH_USER_PROD: Usuário com permissão de escritaSSH_KEY_PROD: Chave privada SSH para acesso ao servidor
Gatilhos
O pipeline é executado automaticamente quando:
- Um push é feito para a branch
master - Um gatilho manual é ativado via workflow_dispatch
Etapas do Workflow
1. Checkout do Código
- name: Checkout do código
uses: actions/checkout@v3
Faz o download do código-fonte do repositório.
2. Configuração do SDK .NET
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
Prepara o ambiente com o SDK .NET 8.0 necessário para build e publish.
3. Restore das Dependências
- name: Restore dependências
run: dotnet restore
Restaura os pacotes NuGet.
4. Build da Aplicação
- name: Build aplicação
run: dotnet build
Compila o projeto.
5. Publicação da Aplicação
- name: Publish aplicação
run: dotnet publish -o ./publish
Gera os artefatos de publicação em ./publish.
6. Remoção do appsettings.json
- name: Remover global.js para preservar do servidor
run: rm ./publish/wwwroot/js/global.js
Evita sobrescrever a configuração de produção no servidor.
7. Backup no Servidor
- name: Fazer backup
uses: appleboy/ssh-action@v1.0.0
with:
...
script: |
mkdir -p /var/www/erp-ui-backup
cp -r /var/www/erp-ui "/var/www/erp-ui-backup/backup_$(date +'%Y%m%d_%H%M%S')"
Realiza backup da versão atual da aplicação antes do deploy.
8. Envio via SCP
- name: Deploy para o servidor via SCP
uses: appleboy/scp-action@v0.1.4
with:
...
source: "./publish/**"
target: "/var/www/erp-ui"
strip_components: 1
Copia os arquivos da publicação para o servidor.
9. Restauração do global.js e Restart
- name: Restaurar global.js e reiniciar serviço
uses: appleboy/ssh-action@v1.0.0
with:
...
script: |
cp /var/www/global.js /var/www/erp-ui/wwwroot/js/global.js
sudo systemctl restart erp_ui.service
Repõe o global.js e reinicia o serviço ERP_UI via systemctl.
Resultado Esperado
Ao final do processo:
- A aplicação é compilada e publicada
- O ambiente de produção é atualizado
- O serviço
erp_ui.serviceé reiniciado com a nova versão
Observações
- Este workflow não sobrescreve o
global.js, mantendo a configuração local do servidor intacta. - Backups automáticos são feitos com timestamp antes de cada deploy.
Arquivo completo
name: Build and Deploy BOX3_ERP_UI Produção
on:
push:
branches:
- master
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout do código
uses: actions/checkout@v3
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Restore dependências
run: dotnet restore
- name: Build aplicação
run: dotnet build
- name: Publish aplicação
run: dotnet publish -o ./publish
- name: Remover global.js para preservar do servidor
run: rm ./publish/wwwroot/js/global.js
- name: Fazer backup
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SSH_HOST_PROD }}
username: ${{ secrets.SSH_USER_PROD }}
key: ${{ secrets.SSH_KEY_PROD }}
port: 22
script: |
mkdir -p /var/www/erp-ui-backup
cp -r /var/www/erp-ui "/var/www/erp-ui-backup/backup_$(date +'%Y%m%d_%H%M%S')"
- name: Deploy para o servidor via SCP
uses: appleboy/scp-action@v0.1.4
with:
host: ${{ secrets.SSH_HOST_PROD }}
username: ${{ secrets.SSH_USER_PROD }}
key: ${{ secrets.SSH_KEY_PROD }}
port: 22
source: "./publish/**"
target: "/var/www/erp-ui"
strip_components: 1
- name: Restaurar global.js e reiniciar serviço
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SSH_HOST_PROD }}
username: ${{ secrets.SSH_USER_PROD }}
key: ${{ secrets.SSH_KEY_PROD }}
port: 22
script: |
cp /var/www/global.js /var/www/erp-ui/wwwroot/js/global.js
systemctl restart erp_ui.service