- Spostata tutta la configurazione di deployment in /deployment (docker-compose, unraid-template, guide) - Aggiunte e aggiornate guide dettagliate: publishing su Gitea, installazione Unraid, struttura progetto - Migliorato target MSBuild: publish automatico su Gitea Registry da Visual Studio, log dettagliati, condizioni più robuste - Aggiornato e ampliato .gitignore per escludere build, dati e file locali - Rimossi file obsoleti dalla root (ora tutto in /deployment) - Struttura più chiara, zero script esterni, documentazione completa e workflow di deploy semplificato
9.2 KiB
?? Publishing Guide - TradingBot
Guida completa per pubblicare TradingBot su Gitea Container Registry usando SOLO Visual Studio e MSBuild integrato.
? Setup Prerequisiti (Una Volta)
1. Login Gitea Registry
Apri PowerShell/Terminal:
docker login gitea.encke-hake.ts.net
# Username: Alby96
# Password: [Personal Access Token Gitea]
Output:
Login Succeeded ?
2. Verifica Docker Desktop
Assicurati che Docker Desktop sia in running:
docker --version
# Docker version 24.x.x o superiore
?? Publishing Workflow
Metodo Unico: Visual Studio + MSBuild Automatico
Step 1: Seleziona Release Configuration
- Build menu ? Configuration Manager
- Active solution configuration: Seleziona Release
- Click Close
Step 2: Publish con Profilo Docker
- Solution Explorer ? Right-click TradingBot
- Click Publish...
- Seleziona profilo "Docker"
- Click sul pulsante "Publish"
Step 3: Automatico! ?
Visual Studio esegue automaticamente:
1. ? Compila progetto in Release mode
2. ? Build immagine Docker (tradingbot:latest)
3. ? Post-build MSBuild target (AUTOMATICO):
- Verifica condizioni (Release + Docker profile)
- Tag gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
- Tag gitea.encke-hake.ts.net/alby96/encelado/tradingbot:1.0.0
- Push entrambi i tag su Gitea Registry
4. ? Mostra conferma nell'Output Window
?? Tempo: 3-5 minuti (prima volta), 1-2 minuti (successive)
?? Verifica Output
Output Window
Durante il publish, monitora l'Output Window:
View ? Output (Ctrl+Alt+O)
Dropdown: "Build"
Dovresti vedere:
========== Build started ==========
1> Building Docker image...
...
1> Successfully built abc123def456
1> Successfully tagged tradingbot:latest
========================================
?? Gitea Container Registry Push
========================================
??? Tagging images...
? Tagged successfully
?? Pushing to gitea.encke-hake.ts.net...
The push refers to repository [gitea.encke-hake.ts.net/alby96/encelado/tradingbot]
latest: digest: sha256:... size: 1234
========================================
? Successfully pushed to Gitea Registry!
========================================
?? Published images:
- gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
- gitea.encke-hake.ts.net/alby96/encelado/tradingbot:1.0.0
?? Verify at:
https://gitea.encke-hake.ts.net/Alby96/Encelado/-/packages
========== Publish: 1 succeeded ==========
?? Verifica su Gitea
Dopo il publish, apri browser:
https://gitea.encke-hake.ts.net/Alby96/Encelado/-/packages
Dovresti vedere:
?? tradingbot
??? latest (280 MB)
? ??? Pushed 2 minutes ago
??? 1.0.0 (280 MB)
??? Pushed 2 minutes ago
?? Aggiornamento Versione
Incrementa Versione
Modifica TradingBot.csproj:
<PropertyGroup>
<Version>1.0.1</Version> <!-- Incrementa qui -->
<AssemblyVersion>1.0.1.0</AssemblyVersion>
<FileVersion>1.0.1.0</FileVersion>
</PropertyGroup>
Publish Nuova Versione
Esegui di nuovo il workflow di publish. Verranno creati:
gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest(aggiornato)gitea.encke-hake.ts.net/alby96/encelado/tradingbot:1.0.1(nuovo)
?? Come Funziona (Dettagli Tecnici)
Post-Build MSBuild Target
Il file TradingBot.csproj contiene un target MSBuild che si attiva automaticamente:
<Target Name="PushToGiteaRegistry"
AfterTargets="Publish"
Condition="'$(Configuration)' == 'Release' And
'$(DOTNET_RUNNING_IN_CONTAINER)' != 'true' And
'$(DockerPublish)' == 'true'">
<!-- Tag e push automatici -->
</Target>
Condizioni di attivazione:
- ? Configuration = Release
- ? Non siamo dentro un container Docker
- ? Profilo Docker in uso (
DockerPublish='true')
Cosa fa:
- Tag immagine locale
tradingbot:latest - Tag con
gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest - Tag con
gitea.encke-hake.ts.net/alby96/encelado/tradingbot:{Version} - Push entrambi i tag su Gitea Registry
- Mostra messaggi nell'Output Window
?? Troubleshooting
Errore: "docker: command not found"
Causa: Docker non in PATH o non installato
Fix:
- Verifica Docker Desktop sia installato e running
- Restart Visual Studio
- Verifica in PowerShell:
docker --version
Errore: "unauthorized: authentication required"
Causa: Non loggato a Gitea Registry
Fix:
docker logout gitea.encke-hake.ts.net
docker login gitea.encke-hake.ts.net
# Inserisci credenziali
Errore: "denied: requested access to the resource is denied"
Causa: Permessi insufficienti o repository non esiste
Fix:
- Verifica che il repository packages esista su Gitea
- Verifica che il token abbia scope
write:packages - Verifica username corretto nel
.csproj(ContainerRepository)
Post-Build Non Si Attiva
Causa: Condizioni non soddisfatte
Fix - Verifica:
- ? Configuration Manager ? Release attivo
- ? Profilo "Docker" selezionato (non altri profili)
- ? Docker Desktop running
- ?
docker logineseguito
Diagnosi:
# Verifica immagine locale esista dopo publish
docker images | findstr tradingbot
# Dovresti vedere: tradingbot latest ...
Se l'immagine locale esiste ma il push non parte:
- Controlla Output Window per messaggi di errore
- Verifica che
DockerPublish='true'sia nel profilo Docker.pubxml
Errore: "La ricompilazione non è riuscita"
Causa: Errore durante build o post-build
Fix:
- View ? Output ? Dropdown: Build
- Cerca errori specifici (linea rossa)
- Se errore docker: verifica Docker Desktop running
- Se errore MSBuild: verifica sintassi
.csproj
Clean & Rebuild:
Build ? Clean Solution
Build ? Rebuild Solution
Build ? Publish (retry)
?? Checklist Publish
Pre-Publish
- Docker Desktop running
docker login gitea.encke-hake.ts.netsuccessful- Configuration Manager ? Release
- Codice committato su Git (opzionale ma consigliato)
During Publish
- Visual Studio ? Build ? Publish
- Profilo "Docker" selezionato
- Build completa senza errori
- Output mostra "Successfully pushed to Gitea Registry!"
Post-Publish
- Verifica su Gitea Packages
- Tag
lateste versione presenti - (Opzionale) Deploy su Unraid
?? Best Practices
Versioning
Usa Semantic Versioning:
- MAJOR: Breaking changes (2.0.0)
- MINOR: New features (1.1.0)
- PATCH: Bug fixes (1.0.1)
Git Workflow
# 1. Sviluppo feature
git checkout -b feature/new-feature
# 2. Commit changes
git add .
git commit -m "feat: Add new feature"
# 3. Merge in main
git checkout main
git merge feature/new-feature
# 4. Tag release
git tag -a v1.0.1 -m "Release 1.0.1"
git push origin main --tags
# 5. Publish Docker image (Visual Studio)
Testing
Prima di ogni publish:
- Test locale (F5 in Debug)
- Test in Docker locale (profilo Docker, F5)
- Verifica funzionalità critiche
- Publish su Gitea (Release mode)
- Deploy su Unraid per test finale
?? Workflow Completo: Dev ? Production
1. ?? Sviluppo in Visual Studio
?? F5 per test locale (HTTP profile)
?? F5 con Docker profile per test container
?? Commit su Git
2. ?? Build & Publish
?? Configuration ? Release
?? Build ? Publish (Docker profile)
?? MSBuild automatico: tag & push Gitea ?
3. ?? Verifica Gitea Packages
?? Browser: packages disponibili
4. ?? Deploy su Unraid
?? Docker tab ? Stop
?? Force Update (pull latest)
?? Start
5. ? Test in Production
?? http://192.168.30.23:8080
Tempo totale: ~10 minuti (compresi test)
?? Risorse
File di Configurazione
TradingBot.csproj: Contiene il post-build targetPushToGiteaRegistryProperties/PublishProfiles/Docker.pubxml: Profilo publish DockerDockerfile: Multi-stage build configuration
Links Utili
?? Tips & Tricks
Debug Post-Build Target
Per vedere cosa sta facendo il post-build:
- Output Window ? Dropdown: Build
- Cerca sezione:
========================================
?? Gitea Container Registry Push
========================================
Build Solo Docker (Senza Push)
Se vuoi solo buildare l'immagine senza push:
Opzione 1: Usa Debug mode
Configuration Manager ? Debug
Build ? Publish (Docker)
# Post-build NON si attiva (serve Release)
Opzione 2: Build manuale
docker build -t tradingbot:latest .
# Crea solo immagine locale
Push Manuale (Se Serve)
Se hai già l'immagine locale e vuoi solo push:
docker tag tradingbot:latest gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
docker push gitea.encke-hake.ts.net/alby96/encelado/tradingbot:latest
?? Publish integrato completamente in Visual Studio!
Zero script esterni, tutto automatico con MSBuild! ?