上传源代码版本
This commit is contained in:
90
deployment/scripts/build-and-publish.ps1
Normal file
90
deployment/scripts/build-and-publish.ps1
Normal file
@@ -0,0 +1,90 @@
|
||||
param(
|
||||
[string]$OutputDirectory = "D:\EPproject\LabelReplaceServer\deployment\green",
|
||||
[string]$Version = (Get-Date -Format "yyyyMMdd-HHmmss"),
|
||||
[string]$Configuration = "Release"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$projectPath = "D:\EPproject\LabelReplaceServer\src\CONTROLLER\CONTROLLER.csproj"
|
||||
$logFile = "D:\EPproject\LabelReplaceServer\deployment\logs\deployment.log"
|
||||
$backupDir = "D:\EPproject\LabelReplaceServer\deployment\backups"
|
||||
|
||||
function Log {
|
||||
param([string]$Message, [string]$Level = "INFO")
|
||||
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
||||
$logEntry = "[$timestamp] [$Level] $Message"
|
||||
Write-Host $logEntry
|
||||
|
||||
$logDirPath = Split-Path -Parent $logFile
|
||||
if (!(Test-Path $logDirPath)) {
|
||||
New-Item -ItemType Directory -Path $logDirPath -Force | Out-Null
|
||||
}
|
||||
Add-Content -Path $logFile -Value $logEntry
|
||||
}
|
||||
|
||||
try {
|
||||
Log "========================================" "INFO"
|
||||
Log "开始编译和发布应用..." "INFO"
|
||||
Log "版本: $Version" "INFO"
|
||||
Log "输出目录: $OutputDirectory" "INFO"
|
||||
Log "配置: $Configuration" "INFO"
|
||||
Log "========================================" "INFO"
|
||||
|
||||
if (!(Test-Path $projectPath)) {
|
||||
throw "项目文件不存在: $projectPath"
|
||||
}
|
||||
|
||||
if (Test-Path $OutputDirectory) {
|
||||
Log "创建输出目录备份..." "INFO"
|
||||
if (!(Test-Path $backupDir)) {
|
||||
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
|
||||
}
|
||||
|
||||
$backupName = "backup_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
|
||||
$backupPath = Join-Path $backupDir $backupName
|
||||
Copy-Item -Path $OutputDirectory -Destination $backupPath -Recurse -Force
|
||||
Log "备份已保存到: $backupPath" "INFO"
|
||||
}
|
||||
|
||||
Log "清理旧的输出目录..." "INFO"
|
||||
if (Test-Path $OutputDirectory) {
|
||||
Remove-Item -Path $OutputDirectory -Recurse -Force
|
||||
}
|
||||
|
||||
Log "执行 dotnet clean..." "INFO"
|
||||
& dotnet clean $projectPath -c $Configuration --nologo
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "dotnet clean 失败,退出代码: $LASTEXITCODE"
|
||||
}
|
||||
|
||||
Log "执行 dotnet restore..." "INFO"
|
||||
& dotnet restore $projectPath --nologo
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "dotnet restore 失败,退出代码: $LASTEXITCODE"
|
||||
}
|
||||
|
||||
Log "执行 dotnet build..." "INFO"
|
||||
& dotnet build $projectPath -c $Configuration --nologo --no-restore
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "dotnet build 失败,退出代码: $LASTEXITCODE"
|
||||
}
|
||||
|
||||
Log "执行 dotnet publish..." "INFO"
|
||||
& dotnet publish $projectPath -c $Configuration -o $OutputDirectory --nologo --no-build
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "dotnet publish 失败,退出代码: $LASTEXITCODE"
|
||||
}
|
||||
|
||||
Log "========================================" "INFO"
|
||||
Log "编译和发布完成!" "INFO"
|
||||
Log "输出位置: $OutputDirectory" "INFO"
|
||||
Log "========================================" "INFO"
|
||||
|
||||
return $true
|
||||
}
|
||||
catch {
|
||||
Log "编译和发布失败: $_" "ERROR"
|
||||
Log "错误详情: $($_.Exception.StackTrace)" "ERROR"
|
||||
return $false
|
||||
}
|
||||
Reference in New Issue
Block a user