You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipelines中PowerShell@2任务失败后如何终止流水线运行?

解决Azure Pipelines中PowerShell任务失败后未终止流水线的问题

问题根源

PowerShell默认不会因为sqlcmd这类外部命令的退出错误码自动标记任务失败,即便continueOnError保持默认的false也无效。你设置的failOnStderr: true仅会在命令将错误输出到stderr时触发任务失败,但sqlcmd部分错误仅通过退出码返回、未输出到stderr,导致任务未被标记为失败,后续步骤仍继续执行。

解决方案

修改PowerShell脚本,显式捕获sqlcmd的退出码,手动触发任务失败:

- task: PowerShell@2
  displayName: "Delete TEST DB"
  condition: eq('${{ parameters.dataresetenv }}', 'test')
  env:
    TEST_DB_USERNAME: $(TEST_DB_USERNAME)
    TEST_DB_PASSWORD: $(TEST_DB_PASSWORD)
  inputs:
    failOnStderr: true
    targetType: 'inline'
    script: |
      $resourceGroupName = 'MY-TEST-RESOURCE-GROUP'
      $ServerName = "my-test-server.database.windows.net"
      # 执行sqlcmd删除数据库命令
      sqlcmd -S $ServerName -U "$(TEST_DB_USERNAME)" -P "$(TEST_DB_PASSWORD)" -q "DROP Database [MY-TEST-DB];"
      # 捕获sqlcmd的退出码,非0则终止任务并标记失败
      if ($LASTEXITCODE -ne 0) {
          Write-Error "删除测试数据库失败,sqlcmd退出码: $LASTEXITCODE"
          exit 1
      }

关键说明

  • $LASTEXITCODE是PowerShell存储外部命令退出码的内置变量,sqlcmd执行失败时会返回非0值。
  • 通过exit 1可让PowerShell任务明确标记为失败,触发流水线的失败逻辑,自动终止后续步骤的执行(无需额外修改后续步骤的条件,默认失败任务后的步骤会自动跳过)。

内容的提问来源于stack exchange,提问作者starrywrites

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:21:06