azure-devops - 如何在 azure DevOps YAML 管道中发送构建后消息?
问题描述
我正在尝试在 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)
解决方案
您可以指定每个阶段运行的条件。默认情况下,如果一个阶段不依赖于任何其他阶段,或者它所依赖的所有阶段都已完成并成功,则它会运行。
根据运行前一个阶段的状态运行阶段的示例:
stages:
- stage: A
# stage B runs if A fails
- stage: B
condition: failed()
# stage C runs if B succeeds
- stage: C
dependsOn:
- A
- B
condition: succeeded('B')
使用自定义条件的示例:
stages:
- stage: A
- stage: B
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/master'))
注意:您当前无法指定基于前一阶段中设置的输出变量的值运行的阶段。
文档:
推荐阅读
- reactjs - 使用 onSelect 函数调用更新 react-final-form Field 组件的值?
- import - Prestashop - 为颜色属性导入纹理图像
- r - 将数据框单列中的值向上移动,并在另一列中指定滞后
- c# - Psexec 没有在远程机器上打开 chrome 浏览器
- javascript - ReactJS web 应用程序:选择性移动滚动错误
- javascript - 如何在 JQuery 中替换元素内的名称属性?
- c++ - 执行 ls 命令并打印输出
- python-3.x - Python电子邮件图像作为附件发送
- python - 由于舍入错误,无法使用 interp1d
- python - Pandas 根据两个日期时间/日期之间的频率获取日期周期数