我正在 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
}
您知道为什么跳过部署作业吗?
答案 0 :(得分:1)
我能够使用这些退出值来使管道任务成功或失败:
if($equal) {
# make pipeline to succeed
exit 0
}
else {
exit 1
}
我在自己的阶段而不是在作业中使用了 PowerShell 脚本并且它起作用了,当任务失败时,我可以执行所需的手动操作并再次运行任务。
干杯, 克劳德