在 Azure 管道中,Powershell 如何使任务失败?
In Azure pipeline, how can Powershell make a task fail?
我正在 Windows 自托管代理上使用 Azure Pipelines。
我需要我的管道 运行 一个 PowerShell 脚本,如果脚本成功,下一阶段进行部署,否则任务失败,我们必须修复一些东西并恢复任务
我将描述管道从一开始就做了什么,因为它可能有助于理解。
首先,管道调用一个带有参数的模板:
stages:
- template: release.yml@templates
parameters:
dbConnectionString: ''
模板release.yml@templates 如下:
parameters:
- name: 'dbConnectionString'
default: ''
type: string
有第一阶段简单地构建项目,工作正常
stages:
- stage: Build
- job: Build_Project
steps:
- checkout: none
- template: build.yml
第二阶段取决于前一阶段的结果。
对于模板的某些情况,没有要检查的数据库,所以我 运行 作业只提供了一个参数。
然后,我想 运行 仅当 DBCheck 成功或没有参数时才使用 CompareFile 脚本。
- stage: Deploy
dependsOn:
- Build
condition: eq( dependencies.Build.result, 'Succeeded' )
jobs:
- job: CheckDb
condition: ne('${{ parameters.dbConnectionString }}', '')
steps:
- checkout: none
- template: validate-db.yml@templates
parameters:
ConnectionString: '${{ parameters.dbConnectionString }}'
- job: CompareFiles
dependsOn: CheckDb
condition: or( eq( dependencies.CheckDb.result, 'Succeeded' ), eq('${{ parameters.dbConnectionString }}', '') )
steps:
- checkout: none
- task: PowerShell@2
name: compareFiles
inputs:
targetType: filePath
filePath: 'compareFile.ps1'
- deployment: Deploy2
dependsOn: CompareFiles
environment: 'Env ST'
strategy:
runOnce:
deploy:
steps:
- task: PowerShell@2
inputs:
targetType: filePath
filePath: 'File.ps1'
接下来的工作是比较文件,下面是CompareFile.ps1
文件。
文件 compareFileContent.ps1
试图使任务失败或成功,但我对 PowerShell 了解不够。
我在某处发现 $host.SetShouldExit(10)
可能会使任务失败,所以我尝试 10
失败,0
成功,
我也尝试了退出值,但现在,使用 $equal = $true
测试阶段“Deploy2”被跳过,所以我被阻止了
[CmdletBinding()]
param ()
***
$equal = $true
if($equal) {
# make pipeline to succeed
$host.SetShouldExit(0)
exit 0
}
else {
# make pipeline to fail
$host.SetShouldExit(10)
exit 10
}
您知道为什么跳过部署作业吗?
我能够使用这些退出值来使管道任务成功或失败:
if($equal) {
# make pipeline to succeed
exit 0
}
else {
exit 1
}
我在它自己的阶段而不是在作业中使用了 PowerShell 脚本并且它起作用了,当任务失败时,我可以执行所需的手动操作并再次 运行 任务。
干杯,
克劳德
我正在 Windows 自托管代理上使用 Azure Pipelines。 我需要我的管道 运行 一个 PowerShell 脚本,如果脚本成功,下一阶段进行部署,否则任务失败,我们必须修复一些东西并恢复任务
我将描述管道从一开始就做了什么,因为它可能有助于理解。
首先,管道调用一个带有参数的模板:
stages:
- template: release.yml@templates
parameters:
dbConnectionString: ''
模板release.yml@templates 如下:
parameters:
- name: 'dbConnectionString'
default: ''
type: string
有第一阶段简单地构建项目,工作正常
stages:
- stage: Build
- job: Build_Project
steps:
- checkout: none
- template: build.yml
第二阶段取决于前一阶段的结果。 对于模板的某些情况,没有要检查的数据库,所以我 运行 作业只提供了一个参数。 然后,我想 运行 仅当 DBCheck 成功或没有参数时才使用 CompareFile 脚本。
- stage: Deploy
dependsOn:
- Build
condition: eq( dependencies.Build.result, 'Succeeded' )
jobs:
- job: CheckDb
condition: ne('${{ parameters.dbConnectionString }}', '')
steps:
- checkout: none
- template: validate-db.yml@templates
parameters:
ConnectionString: '${{ parameters.dbConnectionString }}'
- job: CompareFiles
dependsOn: CheckDb
condition: or( eq( dependencies.CheckDb.result, 'Succeeded' ), eq('${{ parameters.dbConnectionString }}', '') )
steps:
- checkout: none
- task: PowerShell@2
name: compareFiles
inputs:
targetType: filePath
filePath: 'compareFile.ps1'
- deployment: Deploy2
dependsOn: CompareFiles
environment: 'Env ST'
strategy:
runOnce:
deploy:
steps:
- task: PowerShell@2
inputs:
targetType: filePath
filePath: 'File.ps1'
接下来的工作是比较文件,下面是CompareFile.ps1
文件。
文件 compareFileContent.ps1
试图使任务失败或成功,但我对 PowerShell 了解不够。
我在某处发现 $host.SetShouldExit(10)
可能会使任务失败,所以我尝试 10
失败,0
成功,
我也尝试了退出值,但现在,使用 $equal = $true
测试阶段“Deploy2”被跳过,所以我被阻止了
[CmdletBinding()]
param ()
***
$equal = $true
if($equal) {
# make pipeline to succeed
$host.SetShouldExit(0)
exit 0
}
else {
# make pipeline to fail
$host.SetShouldExit(10)
exit 10
}
您知道为什么跳过部署作业吗?
我能够使用这些退出值来使管道任务成功或失败:
if($equal) {
# make pipeline to succeed
exit 0
}
else {
exit 1
}
我在它自己的阶段而不是在作业中使用了 PowerShell 脚本并且它起作用了,当任务失败时,我可以执行所需的手动操作并再次 运行 任务。
干杯, 克劳德