【发布时间】:2020-05-10 04:40:16
【问题描述】:
我正在尝试在 Azure DevOps YAML 管道中完成/失败后发送构建后 Slack 消息。但似乎我找不到合适的条件设置。
基本上,我分为三个阶段:测试、构建和通知。
我最后尝试了以下方法,但 dependencies.UnitTest.result 返回 null,所以没有给我 Succeeded 或 Failed。
我也尝试了很多不同的条件,但都没有奏效。例如,没有依赖关系的普通 succeeded() 和 failed(),或 succeeded('Test') 作为阶段级别或 succeeded('UnitTest') 作为作业级别。
在大多数情况下,即使在测试阶段失败,它们也会发送成功消息,或者将作业名称作为 succeeded() 或 failed() 中的参数的语法错误
像 Jenkins 这样发送构建后消息的合适条件是什么?
stages:
- stage: Test
jobs:
- job: UnitTest
steps:
- script: echo UnitTest
- script: exit 1
- stage: Build
jobs:
- job: Build
steps:
- script: echo Build
- stage: Notify
dependsOn:
- Test
- Build
condition: succeededOrFailed()
jobs:
- job: Succeed
condition: eq(dependencies.UnitTest.result, 'Succeeded')
steps:
- script: echo Succeed #(slack)
- job: Fail
condition: eq(dependencies.UnitTest.result, 'Failed')
steps:
- script: echo Fail #(slack)
--- 编辑 ---
MS 支持多阶段确认的作业,不能作为 yaml 语法本身支持。
与预期的原始流程不同,但您可以将成功和失败分为不同的阶段,如下所示。 (如果你想为每个作业提供不同的消息,它可能会增加相当多的阶段,只是为了通知..)
...
- stage: Notify_Succeeded
condition: succeeded()
jobs:
- job: Succeed
steps:
- script: echo Succeed #(slack)
- stage: Notify_Fail
condition: failed()
jobs:
- job: Fail
steps:
- script: echo Fail #(slack)
【问题讨论】:
-
您可以使用 WebHooks 来完成此操作:docs.microsoft.com/en-us/azure/devops/service-hooks/services/…
-
谢谢@derekbaker783 我可以看到服务挂钩有松弛和一般的网络挂钩支持,但它似乎只发送预定义的消息。有什么方法可以发送阻止套件消息吗?
-
另外,有些人可能会想知道条件本身,以防他们想发布工作,而不仅仅是通知。 Azure devops doc 可能会错过阶段到阶段条件的某些内容。我从他们的文档中复制了这个 dependencies.result 东西,但这个例子处于同一阶段并且有效。但就我而言,它们处于不同的阶段。我想知道是否会有像 jenkins 那样的简单构建状态变量。
-
@CeceDong-MSFT 不幸的是,他的样本还不适合我。一旦我可以让它在我的身上工作,我会确认。
标签: azure-devops azure-pipelines