从管道中的多个步骤调用单个Logic应用程序

时间:2020-01-14 20:10:38

标签: azure-pipelines azure-logic-apps azure-data-factory-2

我创建了一个ADF管道,其中包含多个组件;执行存储过程,执行复制数据任务。总共有14对(7对),我想触发一个失败,该失败将发送一封带有错误消息的电子邮件。

我已经去创建了一个逻辑应用程序来发送电子邮件,如本链接所述 http://microsoft-bitools.blogspot.com/2018/03/add-email-notification-in-azure-data.html

在“网络活动”组件->设置->正文中,我具有以下内容:

    "DataFactoryName":
        "@{pipeline().DataFactory}",
    "PipelineName":
        "@{pipeline().Pipeline}",
    "ErrorMessage":
        "@{activity('Execute Package').error.message}",
    "EmailTo":
        "@{pipeline().parameters.EmailTo}"
}

“执行包”是存储过程或“复制数据”活动的名称。enter image description here

问题在于它仅适用于命名活动“执行包”。我一直找不到能够动态获取其来源的任何地方。 有什么办法可以进行单一的网络活动吗?我不想在我的管道中再创建14个事物来处理不同的可能失败。 由于只有一件事正在调用,因此对SendCompletionEmail的调用在逻辑应用程序中可以正常工作。

1 个答案:

答案 0 :(得分:1)

我想花一点时间指出,在解决了当前问题(如何从多个来源中获取错误)之后,您还将面临另一个问题:FailureSendEmail活动将不会在您期望的情况下运行。

第一个问题(如何获取失败者的错误): 假设您的管道是线性的,并且您只希望一个活动失败,而所有后续活动都不会运行,那么我建议您使用合并功能。 Coalesce获取第一个非null参数。这是我使用2个存储过程计算出的示例: aws lambda add-permission Coalesce接受任意数量的参数,因此您可以随意扩展它。

另一个问题是所有“失败时”连接。虽然您构建的内容有意义,但请让我解释一下。当一个活动具有多个依赖关系连接时,除非所有依赖关系都报告了,否则它将不会执行。这些是AND(与)操作,而不是OR(与)操作。

幸运的是,您无需直接连接即可引用活动输出/错误。您只需要间接连接。如果您的管道逻辑是线性的,那么您已经拥有了。删除所有进入const { darkTheme } = require('@ant-design/dark-theme'); const { override, fixBabelImports, addLessLoader } = require('customize-cra'); module.exports = override( fixBabelImports('import', { libraryName: 'antd', libraryDirectory: 'es', style: true, }), addLessLoader({ javascriptEnabled: true, modifyVars: darkTheme }), ); 的行。然后从上一个“复制数据”活动中添加“失败时”和“跳过”依赖关系连接。逻辑如下:

假设“成功之路”中的所有活动都与成功依赖关系相关联, 如果一项活动在管道的早期失败,则将跳过后续活动。这满足了跳过的依赖性。 如果最后一个复制活动失败,则这将满足失败依赖性。