feat(sprint4-6): quality, reliability, perf baseline
Sprint 4 — qualità codice: - scripts/_Common.psm1: New-CISessionOption, Resolve-VmrunPath, Invoke-Vmrun - PSScriptAnalyzerSettings.psd1: project-wide PSSA rules (security + formatting) - Remove-BuildVM.ps1: SupportsShouldProcess (-WhatIf support) - Invoke-RemoteBuild.ps1, Get-BuildArtifacts.ps1: use New-CISessionOption from module - New-BuildVM.ps1: use Resolve-VmrunPath + Invoke-Vmrun from module Sprint 5 — affidabilità: - Backup-CITemplate.ps1: stop runner, timestamped VMDK backup, prune old, restart - Watch-RunnerHealth.ps1: auto-restart act_runner, cooldown 3/h, EventLog + webhook - Register-CIScheduledTasks.ps1: add CI-RunnerHealth task (every 15 min) Sprint 6 — perf baseline: - Set-TemplateSharedFolders.ps1: idempotent VMX editor for NuGet/pip shared folders - Invoke-RemoteBuild.ps1: -UseSharedCache injects NUGET_PACKAGES + PIP_CACHE_DIR in guest - Measure-CIBenchmark.ps1: times clone/start/IP/WinRM/destroy, appends to benchmark.jsonl Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
Registers Windows Scheduled Tasks for CI system maintenance.
|
||||
|
||||
.DESCRIPTION
|
||||
Creates or updates two tasks under the \CI\ task folder:
|
||||
Creates or updates four tasks under the \CI\ task folder:
|
||||
|
||||
CI-CleanupOrphans — Runs Cleanup-OrphanedBuildVMs.ps1 every 6 hours
|
||||
and at host startup. Destroys stale build VMs
|
||||
@@ -17,7 +17,15 @@
|
||||
Purges old artifact and log directories per the
|
||||
configured retention window.
|
||||
|
||||
Both tasks run as SYSTEM with highest privilege. Idempotent: safe to re-run
|
||||
CI-DiskSpaceAlert — Runs Watch-DiskSpace.ps1 every 15 minutes.
|
||||
Writes an Event Log warning and optional webhook
|
||||
when CI drive free space falls below 50 GB.
|
||||
|
||||
CI-RunnerHealth — Runs Watch-RunnerHealth.ps1 every 15 minutes.
|
||||
Auto-restarts act_runner if stopped; rate-limited
|
||||
to 3 restarts per hour before requiring manual fix.
|
||||
|
||||
All tasks run as SYSTEM with highest privilege. Idempotent: safe to re-run
|
||||
after updating the scripts — existing tasks are overwritten (-Force).
|
||||
|
||||
.PARAMETER ScriptRoot
|
||||
@@ -155,4 +163,36 @@ if (-not (Test-Path $diskScript -PathType Leaf)) {
|
||||
}
|
||||
}
|
||||
|
||||
# ── Task 4: CI-RunnerHealth ───────────────────────────────────────────────────
|
||||
$healthScript = Join-Path $ScriptRoot 'Watch-RunnerHealth.ps1'
|
||||
if (-not (Test-Path $healthScript -PathType Leaf)) {
|
||||
Write-Warning "Script not found — skipping CI-RunnerHealth: $healthScript"
|
||||
} else {
|
||||
$healthAction = New-ScheduledTaskAction `
|
||||
-Execute $psExe `
|
||||
-Argument "-NoProfile -NonInteractive -ExecutionPolicy Bypass -File `"$healthScript`""
|
||||
|
||||
# Every 15 minutes indefinitely
|
||||
$health15min = New-ScheduledTaskTrigger -Once -At '00:00' `
|
||||
-RepetitionInterval (New-TimeSpan -Minutes 15)
|
||||
|
||||
$healthSettings = New-ScheduledTaskSettingsSet `
|
||||
-ExecutionTimeLimit (New-TimeSpan -Minutes 5) `
|
||||
-MultipleInstances IgnoreNew `
|
||||
-StartWhenAvailable
|
||||
|
||||
if ($PSCmdlet.ShouldProcess('CI-RunnerHealth', 'Register/update scheduled task')) {
|
||||
Register-ScheduledTask `
|
||||
-TaskName 'CI-RunnerHealth' `
|
||||
-TaskPath $taskPath `
|
||||
-Action $healthAction `
|
||||
-Trigger $health15min `
|
||||
-Principal $principal `
|
||||
-Settings $healthSettings `
|
||||
-Description 'Auto-restarts act_runner service if stopped; rate-limited to 3 restarts/h (Local CI/CD System)' `
|
||||
-Force | Out-Null
|
||||
Write-Host "[Register] CI-RunnerHealth registered (every 15 min, max 3 restarts/h)." -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "`n[Register] Done. Verify with: Get-ScheduledTask -TaskPath '\CI\' | Format-Table TaskName, State" -ForegroundColor Cyan
|
||||
|
||||
Reference in New Issue
Block a user