refactor(§7.5): rinomina Setup-* Install-CIToolchain-* (WinBuild2025/2022/Linux2404)

- template/Setup-WinBuild2025.ps1  Install-CIToolchain-WinBuild2025.ps1
- template/Setup-WinBuild2022.ps1  Install-CIToolchain-WinBuild2022.ps1
- template/Setup-LinuxBuild2404.sh  Install-CIToolchain-Linux2404.sh

Aggiornati tutti i riferimenti in: Prepare-WinBuild2025/2022, Prepare-LinuxBuild2404,
Deploy-WinBuild2025/2022/LinuxBuild2404, Validate-DeployState, Validate-SetupState,
README.md, TODO.md, docs/WINDOWS-TEMPLATE-SETUP.md, docs/LINUX-TEMPLATE-SETUP.md,
docs/TEST-PLAN-v1.3-to-HEAD.md, gitea/actions/local-ci-build/action.yml.

§7 chiuso (5/5 done).
This commit is contained in:
Simone
2026-05-11 22:48:33 +02:00
parent 6511d47a9a
commit 4758fbc519
17 changed files with 158 additions and 134 deletions
+8 -7
View File
@@ -11,7 +11,7 @@
| ------------------------------------- | ---------------- | --------------------------------------------------------------------------- |
| `template/Deploy-LinuxBuild2404.ps1` | **Host** (PS) | Crea VM da cloud image VMDK, genera seed ISO cloud-init, avvia, aspetta SSH |
| `template/Prepare-LinuxBuild2404.ps1` | **Host** (PS) | Copia + esegue setup via SSH, valida stato, prende snapshot |
| `template/Setup-LinuxBuild2404.sh` | **Guest** (Bash) | Installa toolchain CI, dirs, hardening, gate finale |
| `template/Install-CIToolchain-Linux2404.sh` | **Guest** (Bash) | Installa toolchain CI, dirs, hardening, gate finale |
| `scripts/_Transport.psm1` | **Host** (PS) | Funzioni SSH-only per il branch Linux (WinRM esistente invariato per ora) |
Perche tre script separati (non tutto-in-uno): cloud-init copre solo il bootstrap OS
@@ -107,7 +107,7 @@ Non richiede installazione OS parte dal cloud VMDK pre-built.
`ssh_authorized_keys` con contenuto di `ci_linux.pub`
- Nessun `packages`, nessun `package_update`, nessun `runcmd`:
tutto il provisioning (apt, toolchain, SSH hardening, swap) e' delegato a
`Prepare-LinuxBuild2404.ps1` via `Setup-LinuxBuild2404.sh`
`Prepare-LinuxBuild2404.ps1` via `Install-CIToolchain-Linux2404.sh`
- Nessun `power_state`: il reboot non e' necessario, cloud-init completa tutto al primo boot
- [x] **Step 3 Costruisce seed ISO nocloud** via IMAPI2FS COM
@@ -181,18 +181,18 @@ Equivalente di `Prepare-WinBuild2025.ps1` con SSH al posto di WinRM.
```
Solo al primo run; idempotente se gia presente.
- [x] **Step 4 Copia Setup-LinuxBuild2404.sh in VM**
- [x] **Step 4 Copia Install-CIToolchain-Linux2404.sh in VM**
```powershell
scp -i F:\CI\keys\ci_linux `
"$PSScriptRoot\Setup-LinuxBuild2404.sh" `
"ci_build@${IP}:/tmp/Setup-LinuxBuild2404.sh"
"$PSScriptRoot\Install-CIToolchain-Linux2404.sh" `
"ci_build@${IP}:/tmp/Install-CIToolchain-Linux2404.sh"
```
Valida: confronta size locale vs remota via `ssh ... stat -c %s /tmp/...`
- [x] **Step 5 Esegui setup script** nel guest
```powershell
ssh -i F:\CI\keys\ci_linux ci_build@$IP `
"chmod +x /tmp/Setup-LinuxBuild2404.sh && sudo /tmp/Setup-LinuxBuild2404.sh"
"chmod +x /tmp/Install-CIToolchain-Linux2404.sh && sudo /tmp/Install-CIToolchain-Linux2404.sh"
# Cattura exit code; != 0 => abort con errore leggibile
```
Flag opzionali passabili: `--skip-update`, `--dotnet`, `--mingw`
@@ -221,7 +221,7 @@ Equivalente di `Prepare-WinBuild2025.ps1` con SSH al posto di WinRM.
---
## Fase C Setup-LinuxBuild2404.sh
## Fase C Install-CIToolchain-Linux2404.sh
Script guest-side (Bash). Installazione toolchain CI e hardening.
Eseguito da Prepare via SSH come `ci_build` con sudo.
@@ -424,3 +424,4 @@ Helper `assert_step()`: stampa `[OK] [Step N] desc` su successo, `exit 1` su fal
- [CI-FLOW.md](CI-FLOW.md) flusso pipeline (aggiornare Step 0 prerequisites)
- [HOST-SETUP.md](HOST-SETUP.md) Setup-Host.ps1 (aggiungere step generazione SSH key)
- [TODO.md §6.1](../TODO.md) tracking implementazione
+7 -6
View File
@@ -1,4 +1,4 @@
# Test Plan: v1.3 → HEAD
# Test Plan: v1.3 → HEAD
Complete validation of all features added since v1.3 tag (2026-05-10).
Organized by sprint area with pre-requisites, test steps, and pass/fail criteria.
@@ -29,7 +29,7 @@ Organized by sprint area with pre-requisites, test steps, and pass/fail criteria
- [x] Gitea available at `http://10.10.20.11:3100` or `https://gitea.emulab.it`
- [x] PowerShell ≥5.1, Pester v5 installed (`Install-Module Pester -MinimumVersion 5.0 -Force`) (Pester 5.7.1 installed 2026-05-10)
- [x] CredentialManager module installed (`Install-Module CredentialManager`) (verified 2026-05-10)
- [x] **[NEW 2026-05-10]** Template includes §6.6 Tier-1 Toolchain: Git for Windows + 7-Zip (Step 11 in Setup-WinBuild2025.ps1)
- [x] **[NEW 2026-05-10]** Template includes §6.6 Tier-1 Toolchain: Git for Windows + 7-Zip (Step 11 in Install-CIToolchain-WinBuild2025.ps1)
---
@@ -711,14 +711,14 @@ if (Test-Path 'C:\Program Files\7-Zip\7z.exe') {
## §6.6 Tier-1 Toolchain (Git + 7-Zip)
**What changed**: Step 11 added to Setup-WinBuild2025.ps1 to install Git for Windows and
**What changed**: Step 11 added to Install-CIToolchain-WinBuild2025.ps1 to install Git for Windows and
7-Zip in the template VM. Critical for §3.3 (In-VM Git clone) and cross-platform builds.
**Files affected**:
- `template/Setup-WinBuild2025.ps1` (Step 11: Git + 7-Zip installation)
- `template/Install-CIToolchain-WinBuild2025.ps1` (Step 11: Git + 7-Zip installation)
- `runner/config.yaml` (updated GITEA_CI_TEMPLATE_PATH)
**Test Steps** (run after template is provisioned with Setup-WinBuild2025.ps1):
**Test Steps** (run after template is provisioned with Install-CIToolchain-WinBuild2025.ps1):
```powershell
# 1. Verify Git is installed and in PATH
@@ -751,7 +751,7 @@ Test-Path 'C:\Temp\test-extract\test-7z.txt'
```
**Pass Criteria**:
- [x] Step 11 executes without errors in Setup-WinBuild2025.ps1
- [x] Step 11 executes without errors in Install-CIToolchain-WinBuild2025.ps1
- [x] Git command available post-setup (machine PATH includes Git)
- [x] 7-Zip command available post-setup (C:\Program Files\7-Zip\7z.exe)
- [x] Final pre-snapshot gate includes git + 7z validation
@@ -840,3 +840,4 @@ After validating new features, run one full end-to-end build to ensure nothing b
# Expected: Build completes successfully, artifact created, JSONL log present, no errors
```
+12 -11
View File
@@ -1,4 +1,4 @@
# Windows Template VM Setup
# Windows Template VM Setup
Procedura di provisioning della template VM **Windows Server 2025** che alimenta i linked
clone usati per ogni job CI. Il template viene creato **una volta**; lo snapshot
@@ -15,18 +15,18 @@ credenziali archiviate, ISO Windows Server presente).
| ----------------------------------- | ------------- | -------------------------------------------------------------------- |
| `template/Deploy-WinBuild2025.ps1` | **Host** | Opzionale: crea VM e installa Windows Server 2025 unattended da ISO |
| `template/Prepare-WinBuild2025.ps1` | **Host** | Orchestratore: copia + esegue Setup nel guest via WinRM (2025) |
| `template/Setup-WinBuild2025.ps1` | **Dentro VM** | CI toolchain (user, .NET, Python, VS) + validazione hardening Deploy |
| `template/Install-CIToolchain-WinBuild2025.ps1` | **Dentro VM** | CI toolchain (user, .NET, Python, VS) + validazione hardening Deploy |
| `template/Deploy-WinBuild2022.ps1` | **Host** | Opzionale: crea VM e installa Windows Server 2022 unattended da ISO |
| `template/Prepare-WinBuild2022.ps1` | **Host** | Orchestratore: copia + esegue Setup nel guest via WinRM (2022) |
| `template/Setup-WinBuild2022.ps1` | **Dentro VM** | CI toolchain per Windows Server 2022 (stesso flusso del 2025) |
| `template/Install-CIToolchain-WinBuild2022.ps1` | **Dentro VM** | CI toolchain per Windows Server 2022 (stesso flusso del 2025) |
| `template/Validate-DeployState.ps1` | **Host** | Valida stato post-Deploy prima di eseguire Prepare (2025 e 2022) |
| `template/Validate-SetupState.ps1` | **Host** | Valida stato post-Setup (Deploy + Setup) prima dello snapshot |
**Confine Deploy / Setup** (refactor §7, 2026-05-10):
- `Deploy-WinBuild2025.ps1` si occupa dell'**OS hardening** (Firewall, WinRM, UAC, Defender, UX tweaks, autologin Administrator, WU GPO locks). Se usato, Setup valida questi come Assert-Step senza re-applicarli.
- `Setup-WinBuild2025.ps1` si occupa della **CI customization** (utente `ci_build`, cartelle `C:\CI`, toolchain .NET/Python/VS, Windows Update lifecycle, cleanup, final gate).
- `Install-CIToolchain-WinBuild2025.ps1` si occupa della **CI customization** (utente `ci_build`, cartelle `C:\CI`, toolchain .NET/Python/VS, Windows Update lifecycle, cleanup, final gate).
`Prepare-WinBuild2025.ps1` apre una WinRM session, copia `Setup-WinBuild2025.ps1` in
`Prepare-WinBuild2025.ps1` apre una WinRM session, copia `Install-CIToolchain-WinBuild2025.ps1` in
`C:\CI\`, lo esegue, raccoglie l'exit code, valida lo stato del guest.
---
@@ -114,15 +114,15 @@ cd N:\Code\Workspace\Local-CI-CD-System\template
Ogni step ha validazione `Assert-Step` (throw on failure, `[OK]` su pass):
1. **Pre-flight**: script dir presente, `Setup-WinBuild2025.ps1` presente, IP ottetti 0-255, TCP/5986 reachable
1. **Pre-flight**: script dir presente, `Install-CIToolchain-WinBuild2025.ps1` presente, IP ottetti 0-255, TCP/5986 reachable
2. **Configura host WinRM client**: aggiunge `$VMIPAddress` ai `TrustedHosts` (no `AllowUnencrypted` — HTTPS non lo richiede)
- Salva valore precedente, ripristinato nel `finally` (host posture invariata)
3. **Validazione host WinRM**: `TrustedHosts` include IP
4. **Test connettività**: `Test-WSMan -Port 5986 -UseSSL -Authentication Basic` con credenziali admin
5. **Apre PSSession** `-UseSSL -Port 5986` verso la VM
6. **Crea `C:\CI`** in guest, valida creazione
7. **Copia `Setup-WinBuild2025.ps1`** in `C:\CI\Setup-WinBuild2025.ps1`, valida size match
8. **Esegue `Setup-WinBuild2025.ps1`** dentro la VM (vedi Fase C)
7. **Copia `Install-CIToolchain-WinBuild2025.ps1`** in `C:\CI\Install-CIToolchain-WinBuild2025.ps1`, valida size match
8. **Esegue `Install-CIToolchain-WinBuild2025.ps1`** dentro la VM (vedi Fase C)
9. **Gestisce reboot 3010**: se WU richiede reboot, riavvia VM e suggerisce re-run con `-SkipWindowsUpdate`
10. **Post-setup remote validation** (9 check via singola `Invoke-Command`):
- WinRM Running
@@ -145,13 +145,13 @@ Ogni step ha validazione `Assert-Step` (throw on failure, `[OK]` su pass):
| `-BuildPassword` | (prompt) | Password per `ci_build` — mai hard-codare |
| `-BuildUsername` | ci_build | Account CI dentro la VM |
| `-DotNetSdkVersion` | 10.0 | Channel .NET SDK |
| `-SkipWindowsUpdate` | (off) | Pass-through a Setup-WinBuild2025.ps1 |
| `-SkipWindowsUpdate` | (off) | Pass-through a Install-CIToolchain-WinBuild2025.ps1 |
| `-StoreCredential` | (off) | Registra `BuildUsername`/`BuildPassword` in Windows Credential Manager |
| `-CredentialTarget` | BuildVMGuest | Target Credential Manager (deve corrispondere a quanto usato da Invoke-CIJob) |
---
## Fase C — Cosa fa `Setup-WinBuild2025.ps1` (dentro la VM)
## Fase C — Cosa fa `Install-CIToolchain-WinBuild2025.ps1` (dentro la VM)
Eseguito automaticamente da Prepare in Fase B. Steps 1/2/3/4b/5b/5c sono
**validation-only** — verificano che Deploy abbia già applicato l'hardening OS.
@@ -295,7 +295,7 @@ toolchain (.NET, VS Build Tools, Python).
| Sintomo | Diagnosi / Fix |
| ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `Cannot reach $VMIPAddress via WinRM` | VM non avviata, WinRM non abilitato, IP errato — verifica con ipconfig |
| `Setup-WinBuild2025.ps1 exited with code 3010` | Reboot richiesto post-WU. Re-run con `-SkipWindowsUpdate` |
| `Install-CIToolchain-WinBuild2025.ps1 exited with code 3010` | Reboot richiesto post-WU. Re-run con `-SkipWindowsUpdate` |
| `[Defender] Validation failed: GPO key` | Defender riattivato da Windows Update — disabilita via gpedit + reboot |
| `VS Build Tools installation timed out` | Network slow o cache corrotta. Re-run con cache pulita (`C:\ProgramData\Microsoft\VisualStudio\Packages`) |
| `Python version match` fail | `$PythonVersion` ≠ versione installata. Aggiorna param o reinstalla |
@@ -312,3 +312,4 @@ toolchain (.NET, VS Build Tools, Python).
- **§2.5 [P1]** Snapshot versionato `BaseClean_<yyyyMMdd>` (rollback in caso di refresh rotto)
- **§2.6 [P2]** Backup automatico VMDK template pre-snapshot
- **In-VM Git Clone** — installare Git for Windows + 7-Zip nel template per ottimizzare flusso