gpt4 book ai didi

powershell - 如果psake发生故障,如何运行后处理?

转载 作者:行者123 更新时间:2023-12-02 23:57:36 26 4
gpt4 key购买 nike

在我们的psake脚本中,在编译之前,我们正在运行 check out 程序集文件。
成功完成编译任务后,将复制程序集,然后检入任务将提交程序集。

这种方法的问题是,如果编译步骤停止,文件将保持 check out 状态。

如果编译任务失败,那么我想运行另一个任务来撤消 checkout 文件。

task CheckOutFiles -description "Checkout the files" `
-precondition { $OutputFiles -ne $null } `
-action {

foreach( $file in $OutputFiles ) {
exec { Checkout-File -FilePath $file }
}
}

task Compile `
-depends Clean `
-description "Compile the code" `
-requiredVariables solutionFile, buildConfiguration `

Write-Host "Building solution $solutionFile" | Out-Null

Assert ( Test-Path $solutionFile ) "SolutionFile $SolutionFile is not found "
Exec { msbuild $SolutionFile "/t:build" "/p:Configuration=$buildConfiguration" }
}

task UndoCheckOutFiles -description "UndoCheckout the files" `
-precondition { $OutputFiles -ne $null } `
-action {

foreach( $file in $OutputFiles ) {
exec { UndoCheckout-File -FilePath $file }
}
}

在编译任务中,如果失败,有什么方法可以运行UndoCheckoutFiles任务吗?

最佳答案

以下两种解决方案的关键是使用try/catch/finally处理MSBuild异常。

如果要将UndoCheckOutFiles保留为单独的任务,则可以运行一个嵌套的构建,该构建报告外部(Compile)失败,但内部(UndoCheckOutFiles)成功:

...
task Compile `
-depends Clean `
-description "Compile the code" `
-requiredVariables solutionFile, buildConfiguration `
{
Write-Host "Building solution $solutionFile" | Out-Null
Assert ( Test-Path $solutionFile ) "SolutionFile $SolutionFile is not found"
Try
{
Exec { msbuild $SolutionFile "/t:build" "/p:Configuration=$buildConfiguration" }
}
Catch
{
Write-Error $_;
}
Finally
{
Invoke-psake -taskList UndoCheckoutFiles
}
}

task UndoCheckOutFiles -description "UndoCheckout the files" `
-precondition { $OutputFiles -ne $null } `
-action {
foreach( $file in $OutputFiles ) {
exec { UndoCheckout-File -FilePath $file }
}

为了获得更清晰的构建输出,只需将 UndoCheckOutFiles操作移到 Compile任务中:
...
task Compile `
-depends Clean `
-description "Compile the code" `
-requiredVariables solutionFile, buildConfiguration `
{
Write-Host "Building solution $solutionFile" | Out-Null
Assert ( Test-Path $solutionFile ) "SolutionFile $SolutionFile is not found"
Try
{
Exec { msbuild $SolutionFile "/t:build" "/p:Configuration=$buildConfiguration" }
}
Catch
{
Write-Error $_;
}
Finally
{
foreach( $file in $OutputFiles ) {
exec { UndoCheckout-File -FilePath $file }
}
}
}

关于powershell - 如果psake发生故障,如何运行后处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com