155 lines
8.0 KiB
PowerShell
155 lines
8.0 KiB
PowerShell
# 由壹点3D素材 - 构建机缓存初始化脚本
|
||
# 功能:一次性准备所有缓存文件,后续构建直接使用,零解压、零网络
|
||
# 状态:旧构建缓存方案,不是当前 Git 增量部署的默认前置步骤
|
||
|
||
param(
|
||
[string]$BuildServerIP = '192.168.40.206',
|
||
[string]$BuildServerUser = 'root',
|
||
[string]$BuildServerPassword = $env:BUILD_SERVER_PASSWORD
|
||
)
|
||
|
||
if ([string]::IsNullOrWhiteSpace($BuildServerPassword)) {
|
||
throw '缺少构建机密码,请先设置 BUILD_SERVER_PASSWORD 环境变量'
|
||
}
|
||
|
||
# 设置编码
|
||
try {
|
||
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||
$OutputEncoding = [System.Text.Encoding]::UTF8
|
||
chcp 65001 | Out-Null
|
||
} catch {}
|
||
|
||
Write-Host "╔════════════════════════════════════════════════════════════╗" -ForegroundColor Cyan
|
||
Write-Host "║ ║" -ForegroundColor Cyan
|
||
Write-Host "║ 由壹点3D素材 - 构建机缓存初始化 ║" -ForegroundColor Cyan
|
||
Write-Host "║ ║" -ForegroundColor Cyan
|
||
Write-Host "╚════════════════════════════════════════════════════════════╝" -ForegroundColor Cyan
|
||
Write-Host ""
|
||
|
||
function Invoke-BuildServer {
|
||
param([string]$Command, [switch]$Silent)
|
||
$result = & "C:\Program Files\PuTTY\plink.exe" -batch -pw $BuildServerPassword "$BuildServerUser@$BuildServerIP" $Command 2>&1
|
||
if (-not $Silent) { $result | ForEach-Object { Write-Host " $_" } }
|
||
return $result
|
||
}
|
||
|
||
function Upload-File {
|
||
param([string]$LocalPath, [string]$RemotePath)
|
||
Write-Host " 上传:$LocalPath → $RemotePath" -ForegroundColor Yellow
|
||
$result = & "C:\Program Files\PuTTY\pscp.exe" -batch -pw $BuildServerPassword $LocalPath "$BuildServerUser@$BuildServerIP`:$RemotePath" 2>&1
|
||
return $LASTEXITCODE -eq 0
|
||
}
|
||
|
||
# 步骤 1:创建缓存目录
|
||
Write-Host "📁 步骤 1:创建缓存目录" -ForegroundColor Magenta
|
||
Invoke-BuildServer -Command "mkdir -p /opt/build-cache/alpine-apk /opt/build-cache/node_modules" -Silent | Out-Null
|
||
Write-Host "✅ 缓存目录已创建" -ForegroundColor Green
|
||
Write-Host ""
|
||
|
||
# 步骤 2:处理 Alpine 包
|
||
Write-Host "📦 步骤 2:准备 Alpine 系统包" -ForegroundColor Magenta
|
||
|
||
$alpineCheck = Invoke-BuildServer -Command "ls /opt/build-cache/alpine-apk/*.apk 2>/dev/null | wc -l" -Silent
|
||
if ($alpineCheck -match "^0") {
|
||
Write-Host " Alpine 包未解压,开始处理..." -ForegroundColor Yellow
|
||
|
||
# 检查本地是否有压缩包
|
||
if (Test-Path ".build-cache/alpine-packages.tar.gz") {
|
||
Write-Host " 从本地上传..." -ForegroundColor Yellow
|
||
Upload-File -LocalPath ".build-cache/alpine-packages.tar.gz" -RemotePath "/tmp/alpine-packages.tar.gz" | Out-Null
|
||
} else {
|
||
Write-Host " ❌ 本地未找到 .build-cache/alpine-packages.tar.gz" -ForegroundColor Red
|
||
Write-Host " 请先准备此文件" -ForegroundColor Red
|
||
exit 1
|
||
}
|
||
|
||
Write-Host " 解压到缓存目录(一次性操作)..." -ForegroundColor Yellow
|
||
Invoke-BuildServer -Command "tar -xzf /tmp/alpine-packages.tar.gz -C /opt/build-cache/alpine-apk/ && rm /tmp/alpine-packages.tar.gz" -Silent | Out-Null
|
||
|
||
$apkCount = Invoke-BuildServer -Command "ls /opt/build-cache/alpine-apk/*.apk | wc -l" -Silent
|
||
Write-Host "✅ Alpine 包已解压($apkCount 个 .apk 文件)" -ForegroundColor Green
|
||
} else {
|
||
Write-Host "✅ Alpine 包已存在(跳过)" -ForegroundColor Green
|
||
}
|
||
Write-Host ""
|
||
|
||
# 步骤 3:处理 node_modules
|
||
Write-Host "📦 步骤 3:准备 node_modules" -ForegroundColor Magenta
|
||
|
||
$nodeCheck = Invoke-BuildServer -Command "test -d /opt/build-cache/node_modules/.bin && echo 'EXISTS' || echo 'MISSING'" -Silent
|
||
if ($nodeCheck -match "MISSING") {
|
||
Write-Host " node_modules 未解压,开始处理..." -ForegroundColor Yellow
|
||
|
||
# 检查本地是否有压缩包
|
||
if (Test-Path ".build-cache/node_modules.tar.gz") {
|
||
Write-Host " 从本地上传..." -ForegroundColor Yellow
|
||
Upload-File -LocalPath ".build-cache/node_modules.tar.gz" -RemotePath "/tmp/node_modules.tar.gz" | Out-Null
|
||
} else {
|
||
Write-Host " ❌ 本地未找到 .build-cache/node_modules.tar.gz" -ForegroundColor Red
|
||
Write-Host " 请先准备此文件" -ForegroundColor Red
|
||
exit 1
|
||
}
|
||
|
||
Write-Host " 解压到缓存目录(一次性操作)..." -ForegroundColor Yellow
|
||
Invoke-BuildServer -Command "tar -xzf /tmp/node_modules.tar.gz -C /opt/build-cache/ && rm /tmp/node_modules.tar.gz" -Silent | Out-Null
|
||
|
||
Write-Host " 设置权限..." -ForegroundColor Yellow
|
||
Invoke-BuildServer -Command "chmod -R +x /opt/build-cache/node_modules/.bin" -Silent | Out-Null
|
||
|
||
Write-Host "✅ node_modules 已解压" -ForegroundColor Green
|
||
} else {
|
||
Write-Host "✅ node_modules 已存在(跳过)" -ForegroundColor Green
|
||
}
|
||
Write-Host ""
|
||
|
||
# 步骤 4:加载基础镜像
|
||
Write-Host "🐳 步骤 4:准备基础镜像" -ForegroundColor Magenta
|
||
|
||
$imageCheck = Invoke-BuildServer -Command "docker images node:18-alpine --format '{{.Repository}}:{{.Tag}}'" -Silent
|
||
if ($imageCheck -notmatch "node:18-alpine") {
|
||
Write-Host " 基础镜像不存在,开始处理..." -ForegroundColor Yellow
|
||
|
||
# 检查本地是否有镜像文件
|
||
if (Test-Path ".build-cache/node-18-alpine.tar") {
|
||
Write-Host " 从本地上传..." -ForegroundColor Yellow
|
||
Upload-File -LocalPath ".build-cache/node-18-alpine.tar" -RemotePath "/tmp/node-18-alpine.tar" | Out-Null
|
||
|
||
Write-Host " 加载到 Docker..." -ForegroundColor Yellow
|
||
Invoke-BuildServer -Command "docker load -i /tmp/node-18-alpine.tar && rm /tmp/node-18-alpine.tar" -Silent | Out-Null
|
||
Write-Host "✅ 基础镜像已加载" -ForegroundColor Green
|
||
} else {
|
||
Write-Host " ⚠️ 本地未找到 .build-cache/node-18-alpine.tar" -ForegroundColor Yellow
|
||
Write-Host " 将在首次构建时自动拉取" -ForegroundColor Yellow
|
||
}
|
||
} else {
|
||
Write-Host "✅ 基础镜像已存在(跳过)" -ForegroundColor Green
|
||
}
|
||
Write-Host ""
|
||
|
||
# 步骤 5:显示缓存状态
|
||
Write-Host "📊 缓存状态总览" -ForegroundColor Magenta
|
||
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
|
||
|
||
Write-Host ""
|
||
Write-Host "Alpine 包:" -ForegroundColor Yellow
|
||
Invoke-BuildServer -Command "du -sh /opt/build-cache/alpine-apk/ 2>/dev/null && ls /opt/build-cache/alpine-apk/*.apk | wc -l | xargs echo ' 文件数:'" -Silent
|
||
|
||
Write-Host ""
|
||
Write-Host "node_modules:" -ForegroundColor Yellow
|
||
Invoke-BuildServer -Command "du -sh /opt/build-cache/node_modules/ 2>/dev/null" -Silent
|
||
|
||
Write-Host ""
|
||
Write-Host "Docker 镜像:" -ForegroundColor Yellow
|
||
Invoke-BuildServer -Command "docker images node:18-alpine --format ' {{.Repository}}:{{.Tag}} - {{.Size}}'" -Silent
|
||
|
||
Write-Host ""
|
||
Write-Host "╔════════════════════════════════════════════════════════════╗" -ForegroundColor Green
|
||
Write-Host "║ ║" -ForegroundColor Green
|
||
Write-Host "║ ✅ 缓存初始化完成! ║" -ForegroundColor Green
|
||
Write-Host "║ ║" -ForegroundColor Green
|
||
Write-Host "╚════════════════════════════════════════════════════════════╝" -ForegroundColor Green
|
||
Write-Host ""
|
||
Write-Host "🎉 现在可以运行 deploy-remote-build.ps1 进行部署" -ForegroundColor Cyan
|
||
Write-Host " 后续构建将直接使用这些缓存,零解压、零网络依赖" -ForegroundColor Cyan
|
||
Write-Host ""
|