v0.0.3 published
This commit is contained in:
308
test/v0.0.3/windows/cleanup_test.ps1
Normal file
308
test/v0.0.3/windows/cleanup_test.ps1
Normal file
@@ -0,0 +1,308 @@
|
||||
# Hexo Container v0.0.3 清理脚本
|
||||
# cleanup_test.ps1 - 清理测试环境和资源
|
||||
|
||||
param(
|
||||
[switch]$Force = $false,
|
||||
[switch]$KeepImages = $false,
|
||||
[switch]$KeepLogs = $false,
|
||||
[switch]$DeepClean = $false,
|
||||
[string]$ContainerName = "hexo-test-v003*",
|
||||
[string]$ImageTag = "hexo*",
|
||||
[switch]$Interactive = $true
|
||||
)
|
||||
|
||||
# 确保脚本在正确的目录下执行
|
||||
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
Set-Location $ScriptDir
|
||||
|
||||
Write-Host "=== Hexo Container v0.0.3 清理脚本 ===" -ForegroundColor Cyan
|
||||
Write-Host "此脚本将清理测试环境中的容器、镜像和日志文件" -ForegroundColor Gray
|
||||
|
||||
# 获取时间戳用于备份
|
||||
$TimeStamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
||||
|
||||
# 创建清理日志
|
||||
$LogDir = ".\logs"
|
||||
if (-not (Test-Path $LogDir)) {
|
||||
New-Item -ItemType Directory -Path $LogDir -Force | Out-Null
|
||||
}
|
||||
$CleanupLog = "$LogDir\cleanup_$TimeStamp.log"
|
||||
|
||||
# 记录清理开始
|
||||
"=== 清理操作开始 $(Get-Date) ===" | Add-Content $CleanupLog
|
||||
|
||||
# 函数:安全确认
|
||||
function Confirm-Action {
|
||||
param([string]$Message, [switch]$Force)
|
||||
|
||||
if ($Force) {
|
||||
Write-Host "FORCE 模式: $Message" -ForegroundColor Yellow
|
||||
return $true
|
||||
}
|
||||
|
||||
if (-not $Interactive) {
|
||||
return $true
|
||||
}
|
||||
|
||||
Write-Host "$Message" -ForegroundColor Yellow
|
||||
$response = Read-Host "继续吗? (y/N)"
|
||||
return ($response -eq "y" -or $response -eq "Y" -or $response -eq "yes")
|
||||
}
|
||||
|
||||
# 函数:停止并删除容器
|
||||
function Remove-TestContainers {
|
||||
param([string]$Pattern, [bool]$Force)
|
||||
|
||||
Write-Host "`n=== 清理容器 ===" -ForegroundColor Cyan
|
||||
|
||||
# 获取匹配的容器
|
||||
$Containers = docker ps -a --filter "name=$Pattern" --format "{{.Names}}" 2>$null
|
||||
|
||||
if (-not $Containers) {
|
||||
Write-Host "未找到匹配的容器: $Pattern" -ForegroundColor Green
|
||||
"未找到匹配的容器: $Pattern" | Add-Content $CleanupLog
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "找到以下容器:" -ForegroundColor Gray
|
||||
$Containers | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
|
||||
|
||||
if (Confirm-Action "删除这些容器?" -Force:$Force) {
|
||||
foreach ($container in $Containers) {
|
||||
Write-Host "停止容器: $container" -ForegroundColor Yellow
|
||||
docker stop $container 2>$null | Out-Null
|
||||
|
||||
Write-Host "删除容器: $container" -ForegroundColor Yellow
|
||||
docker rm $container 2>$null
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "SUCCESS: 容器 $container 已删除" -ForegroundColor Green
|
||||
"SUCCESS: 容器 $container 已删除" | Add-Content $CleanupLog
|
||||
} else {
|
||||
Write-Host "ERROR: 删除容器 $container 失败" -ForegroundColor Red
|
||||
"ERROR: 删除容器 $container 失败" | Add-Content $CleanupLog
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Host "用户取消了容器清理操作" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
|
||||
# 函数:删除镜像
|
||||
function Remove-TestImages {
|
||||
param([string]$Pattern, [bool]$Force)
|
||||
|
||||
Write-Host "`n=== 清理镜像 ===" -ForegroundColor Cyan
|
||||
|
||||
# 获取匹配的镜像
|
||||
$Images = docker images --filter "reference=$Pattern" --format "{{.Repository}}:{{.Tag}}" 2>$null
|
||||
|
||||
if (-not $Images) {
|
||||
Write-Host "未找到匹配的镜像: $Pattern" -ForegroundColor Green
|
||||
"未找到匹配的镜像: $Pattern" | Add-Content $CleanupLog
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "找到以下镜像:" -ForegroundColor Gray
|
||||
$Images | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
|
||||
|
||||
if (Confirm-Action "删除这些镜像?" -Force:$Force) {
|
||||
foreach ($image in $Images) {
|
||||
Write-Host "删除镜像: $image" -ForegroundColor Yellow
|
||||
docker rmi $image 2>$null
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "SUCCESS: 镜像 $image 已删除" -ForegroundColor Green
|
||||
"SUCCESS: 镜像 $image 已删除" | Add-Content $CleanupLog
|
||||
} else {
|
||||
Write-Host "WARNING: 删除镜像 $image 失败(可能被其他容器使用)" -ForegroundColor Yellow
|
||||
"WARNING: 删除镜像 $image 失败" | Add-Content $CleanupLog
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Host "用户取消了镜像清理操作" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
|
||||
# 函数:清理日志文件
|
||||
function Remove-TestLogs {
|
||||
param([bool]$Force, [bool]$DeepClean)
|
||||
|
||||
Write-Host "`n=== 清理日志文件 ===" -ForegroundColor Cyan
|
||||
|
||||
# 检查日志目录
|
||||
if (-not (Test-Path $LogDir)) {
|
||||
Write-Host "日志目录不存在: $LogDir" -ForegroundColor Green
|
||||
return
|
||||
}
|
||||
|
||||
# 获取日志文件
|
||||
$LogFiles = Get-ChildItem $LogDir -File -Recurse | Where-Object {
|
||||
$_.Extension -eq ".log" -or $_.Extension -eq ".txt"
|
||||
}
|
||||
|
||||
if (-not $LogFiles) {
|
||||
Write-Host "未找到日志文件" -ForegroundColor Green
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "找到 $($LogFiles.Count) 个日志文件" -ForegroundColor Gray
|
||||
|
||||
if ($DeepClean) {
|
||||
# 深度清理:删除所有日志文件
|
||||
if (Confirm-Action "深度清理:删除所有日志文件?" -Force:$Force) {
|
||||
$LogFiles | ForEach-Object {
|
||||
Write-Host "删除: $($_.Name)" -ForegroundColor Gray
|
||||
Remove-Item $_.FullName -Force
|
||||
}
|
||||
Write-Host "SUCCESS: 所有日志文件已删除" -ForegroundColor Green
|
||||
"SUCCESS: 深度清理完成,删除了 $($LogFiles.Count) 个日志文件" | Add-Content $CleanupLog
|
||||
}
|
||||
} else {
|
||||
# 普通清理:归档旧日志文件
|
||||
$OldLogsDir = "$LogDir\old_$TimeStamp"
|
||||
|
||||
if (Confirm-Action "将日志文件归档到 old_$TimeStamp 文件夹?" -Force:$Force) {
|
||||
New-Item -ItemType Directory -Path $OldLogsDir -Force | Out-Null
|
||||
|
||||
$LogFiles | ForEach-Object {
|
||||
if ($_.Name -ne "cleanup_$TimeStamp.log") { # 保留当前清理日志
|
||||
Write-Host "归档: $($_.Name)" -ForegroundColor Gray
|
||||
Move-Item $_.FullName $OldLogsDir -Force
|
||||
}
|
||||
}
|
||||
Write-Host "SUCCESS: 日志文件已归档到 $OldLogsDir" -ForegroundColor Green
|
||||
"SUCCESS: 日志文件已归档到 $OldLogsDir" | Add-Content $CleanupLog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 函数:清理SSH密钥
|
||||
function Remove-TestSSHKeys {
|
||||
param([bool]$Force)
|
||||
|
||||
Write-Host "`n=== 清理SSH密钥 ===" -ForegroundColor Cyan
|
||||
|
||||
$SshKeyDir = ".\test_data\ssh_keys"
|
||||
if (-not (Test-Path $SshKeyDir)) {
|
||||
Write-Host "SSH密钥目录不存在: $SshKeyDir" -ForegroundColor Green
|
||||
return
|
||||
}
|
||||
|
||||
# 查找临时生成的密钥文件
|
||||
$TempKeys = Get-ChildItem $SshKeyDir -File | Where-Object {
|
||||
$_.Name -match "temp_" -or $_.Name -match "test_key" -or $_.Name -match "container_key"
|
||||
}
|
||||
|
||||
if (-not $TempKeys) {
|
||||
Write-Host "未找到临时SSH密钥文件" -ForegroundColor Green
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "找到以下临时SSH密钥:" -ForegroundColor Gray
|
||||
$TempKeys | ForEach-Object { Write-Host " $($_.Name)" -ForegroundColor Gray }
|
||||
|
||||
if (Confirm-Action "删除这些临时SSH密钥?" -Force:$Force) {
|
||||
$TempKeys | ForEach-Object {
|
||||
Write-Host "删除: $($_.Name)" -ForegroundColor Gray
|
||||
Remove-Item $_.FullName -Force
|
||||
}
|
||||
Write-Host "SUCCESS: 临时SSH密钥已删除" -ForegroundColor Green
|
||||
"SUCCESS: 删除了 $($TempKeys.Count) 个临时SSH密钥" | Add-Content $CleanupLog
|
||||
}
|
||||
}
|
||||
|
||||
# 函数:Docker系统清理
|
||||
function Invoke-DockerSystemClean {
|
||||
param([bool]$Force)
|
||||
|
||||
Write-Host "`n=== Docker系统清理 ===" -ForegroundColor Cyan
|
||||
|
||||
if (Confirm-Action "执行 docker system prune 清理未使用的资源?" -Force:$Force) {
|
||||
Write-Host "执行 docker system prune..." -ForegroundColor Yellow
|
||||
docker system prune -f 2>$null
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "SUCCESS: Docker系统清理完成" -ForegroundColor Green
|
||||
"SUCCESS: Docker系统清理完成" | Add-Content $CleanupLog
|
||||
} else {
|
||||
Write-Host "WARNING: Docker系统清理失败" -ForegroundColor Yellow
|
||||
"WARNING: Docker系统清理失败" | Add-Content $CleanupLog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 主清理流程
|
||||
Write-Host "`n开始清理操作..." -ForegroundColor Yellow
|
||||
|
||||
# 1. 清理容器
|
||||
Remove-TestContainers -Pattern $ContainerName -Force $Force
|
||||
|
||||
# 2. 清理镜像(如果不保留)
|
||||
if (-not $KeepImages) {
|
||||
Remove-TestImages -Pattern $ImageTag -Force $Force
|
||||
}
|
||||
|
||||
# 3. 清理日志文件(如果不保留)
|
||||
if (-not $KeepLogs) {
|
||||
Remove-TestLogs -Force $Force -DeepClean $DeepClean
|
||||
}
|
||||
|
||||
# 4. 清理SSH密钥
|
||||
Remove-TestSSHKeys -Force $Force
|
||||
|
||||
# 5. Docker系统清理(如果深度清理)
|
||||
if ($DeepClean) {
|
||||
Invoke-DockerSystemClean -Force $Force
|
||||
}
|
||||
|
||||
# 显示清理结果
|
||||
Write-Host "`n=== 清理完成 ===" -ForegroundColor Cyan
|
||||
|
||||
# 检查剩余资源
|
||||
Write-Host "`n剩余资源状态:" -ForegroundColor Gray
|
||||
|
||||
Write-Host " 容器:" -ForegroundColor Gray
|
||||
$RemainingContainers = docker ps -a --filter "name=hexo*" --format "{{.Names}}" 2>$null
|
||||
if ($RemainingContainers) {
|
||||
$RemainingContainers | ForEach-Object { Write-Host " $_" -ForegroundColor Yellow }
|
||||
} else {
|
||||
Write-Host " 无相关容器" -ForegroundColor Green
|
||||
}
|
||||
|
||||
Write-Host " 镜像:" -ForegroundColor Gray
|
||||
$RemainingImages = docker images --filter "reference=hexo*" --format "{{.Repository}}:{{.Tag}}" 2>$null
|
||||
if ($RemainingImages) {
|
||||
$RemainingImages | ForEach-Object { Write-Host " $_" -ForegroundColor Yellow }
|
||||
} else {
|
||||
Write-Host " 无相关镜像" -ForegroundColor Green
|
||||
}
|
||||
|
||||
Write-Host " 日志文件:" -ForegroundColor Gray
|
||||
if (Test-Path $LogDir) {
|
||||
$RemainingLogs = Get-ChildItem $LogDir -File -Recurse | Where-Object {
|
||||
$_.Extension -eq ".log" -or $_.Extension -eq ".txt"
|
||||
}
|
||||
if ($RemainingLogs) {
|
||||
Write-Host " $($RemainingLogs.Count) 个文件" -ForegroundColor Yellow
|
||||
} else {
|
||||
Write-Host " 无日志文件" -ForegroundColor Green
|
||||
}
|
||||
} else {
|
||||
Write-Host " 无日志目录" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# 记录清理完成
|
||||
"=== 清理操作完成 $(Get-Date) ===" | Add-Content $CleanupLog
|
||||
|
||||
Write-Host "`n清理日志: $CleanupLog" -ForegroundColor Gray
|
||||
Write-Host "清理操作完成!" -ForegroundColor Green
|
||||
|
||||
# 用法提示
|
||||
Write-Host "`n用法示例:" -ForegroundColor Cyan
|
||||
Write-Host " .\cleanup_test.ps1 # 交互式清理" -ForegroundColor Gray
|
||||
Write-Host " .\cleanup_test.ps1 -Force # 强制清理,无确认" -ForegroundColor Gray
|
||||
Write-Host " .\cleanup_test.ps1 -KeepImages # 保留镜像" -ForegroundColor Gray
|
||||
Write-Host " .\cleanup_test.ps1 -KeepLogs # 保留日志" -ForegroundColor Gray
|
||||
Write-Host " .\cleanup_test.ps1 -DeepClean # 深度清理" -ForegroundColor Gray
|
||||
Write-Host " .\cleanup_test.ps1 -Force -DeepClean # 强制深度清理" -ForegroundColor Gray
|
||||
Reference in New Issue
Block a user