在 ADF 部署时触发状态更新
Trigger status update at the time of ADF deployment
-
azure-data-factory
-
azure-devops
-
azure-data-factory-2
-
azure-data-factory-pipeline
-
azure-devops-pipelines
我正在使用 Azure DevOps 管道将 ADF ARM 模板从 DEV 实例部署到 PROD。
下面的部署是我遵循的步骤。
- Microsoft 提供的用于在部署前停止触发器的脚本
- ARM 模板部署
- Microsoft 提供的脚本,用于启动触发器并删除不在 JSON 文件中的资源。
在下面页面的 header 示例前和 post-deployment 脚本 下
https://docs.microsoft.com/en-us/azure/data-factory/continuous-integration-deployment
我确实有大约 20 个触发器,其中 15 个处于 运行 状态,5 个在 PROD 中停止了一段时间。
在我的 DEV 实例中,所有触发器都处于停止状态,以避免不必要的管道运行。
但是在部署到 PROD 时,我需要将 20 个触发器中的 15 个的状态设置为 Started。
为了实现这一点,我在模板参数化中添加了触发器的运行时状态,现在我可以 select 从 ARM 模板部署任务中的覆盖参数选项中获取触发器状态,如下所示。
现在的问题是在 PROD 部署之后,所有触发器都处于 Stopped 状态,就像在 DEV 实例中一样。
尽管 runtimeState 在部署时被覆盖,但在部署后它不会反映在 PROD 实例中。
经过我的分析,我怀疑问题出在 Microsoft 的启动触发器脚本引用了 DEV 的 ARMTemplateForFactory.json 文件,其中所有触发器的状态都已停止。
如何解决?我必须在从 DEV 部署到 PROD 时更新每个触发作业的触发状态。
在 Microsoft STOP/START 触发器的脚本中,它正在从我们通过构建管道从 DEV 实例获取的 Json 文件中获取要启动的触发器列表。不会采用覆盖的管道状态来启动触发器。
我找到的解决方案之一是 在 ARM 部署后显式启动 触发器。为此,我找到了一份代理工作,如下所示。
但这项工作的问题是我无法一次提供多个触发器的名称。我能够提供单个触发器的名称,如下所示。
有没有办法在这个作业中添加多个触发器名称?
请检查以下事项:
在您的本地计算机上尝试相同的脚本,看看它们是否可以按预期工作。
如果脚本在您的本地计算机上也不起作用,则问题应该出在 ADF 或脚本上,而不是 Azure DevOps。检查您在 ADF 或脚本中是否有任何错误配置。
如果脚本可以在您的本地机器上按预期工作,请尝试在本地机器上安装一个自托管代理到 运行 管道,看看它是否可以按预期工作.
如您所述,Microsoft 提供的预post 部署脚本会在部署前暂停所有活动触发器,然后在部署后将它们恢复到 ARM 模板中指定的状态。 (他们建议在部署前暂停触发器以避免出现问题)
一种解决方案可能是创建自定义 powershell 脚本并在部署 ARM 模板后执行该脚本。您可以使用 Microsoft 提供的脚本中也使用的 Start-AzDataFactoryV2Trigger
cmdlet。
例如:
$ResourceGroupName = "my-resource-group"
$DataFactoryName = "my-data-factory'
$triggersToStart = @("trigger-1", "trigger-2", "trigger-3")
$triggersToStart | ForEach-Object {
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_ -Force
}
我暂时在ARM模板部署任务后添加了一个新的azure powershell任务来启动需要的触发器
ResourceGroupName、DataFactoryName、TriggersToStart 详细信息作为参数传递给脚本将启动触发器。这样我们就可以在每次部署期间 ADD/REMOVE 启用 的触发器。
下面是我用来获取参数并使用下面的脚本启动触发器的脚本。
param
(
[parameter(Mandatory = $false)] [String] $ResourceGroupName,
[parameter(Mandatory = $false)] [String] $DataFactoryName,
[parameter(Mandatory = $false)] [Array] $triggersToStart
)
Foreach($trigger_name in $triggersToStart)
{
Write-Host "Starting Trigger : " $trigger_name
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $trigger_name -Force
}
azure-data-factory
azure-devops
azure-data-factory-2
azure-data-factory-pipeline
azure-devops-pipelines
我正在使用 Azure DevOps 管道将 ADF ARM 模板从 DEV 实例部署到 PROD。
下面的部署是我遵循的步骤。
- Microsoft 提供的用于在部署前停止触发器的脚本
- ARM 模板部署
- Microsoft 提供的脚本,用于启动触发器并删除不在 JSON 文件中的资源。 在下面页面的 header 示例前和 post-deployment 脚本 下 https://docs.microsoft.com/en-us/azure/data-factory/continuous-integration-deployment
我确实有大约 20 个触发器,其中 15 个处于 运行 状态,5 个在 PROD 中停止了一段时间。 在我的 DEV 实例中,所有触发器都处于停止状态,以避免不必要的管道运行。 但是在部署到 PROD 时,我需要将 20 个触发器中的 15 个的状态设置为 Started。
为了实现这一点,我在模板参数化中添加了触发器的运行时状态,现在我可以 select 从 ARM 模板部署任务中的覆盖参数选项中获取触发器状态,如下所示。
现在的问题是在 PROD 部署之后,所有触发器都处于 Stopped 状态,就像在 DEV 实例中一样。
尽管 runtimeState 在部署时被覆盖,但在部署后它不会反映在 PROD 实例中。
经过我的分析,我怀疑问题出在 Microsoft 的启动触发器脚本引用了 DEV 的 ARMTemplateForFactory.json 文件,其中所有触发器的状态都已停止。
如何解决?我必须在从 DEV 部署到 PROD 时更新每个触发作业的触发状态。
在 Microsoft STOP/START 触发器的脚本中,它正在从我们通过构建管道从 DEV 实例获取的 Json 文件中获取要启动的触发器列表。不会采用覆盖的管道状态来启动触发器。
我找到的解决方案之一是 在 ARM 部署后显式启动 触发器。为此,我找到了一份代理工作,如下所示。
但这项工作的问题是我无法一次提供多个触发器的名称。我能够提供单个触发器的名称,如下所示。
有没有办法在这个作业中添加多个触发器名称?
请检查以下事项:
在您的本地计算机上尝试相同的脚本,看看它们是否可以按预期工作。
如果脚本在您的本地计算机上也不起作用,则问题应该出在 ADF 或脚本上,而不是 Azure DevOps。检查您在 ADF 或脚本中是否有任何错误配置。
如果脚本可以在您的本地机器上按预期工作,请尝试在本地机器上安装一个自托管代理到 运行 管道,看看它是否可以按预期工作.
如您所述,Microsoft 提供的预post 部署脚本会在部署前暂停所有活动触发器,然后在部署后将它们恢复到 ARM 模板中指定的状态。 (他们建议在部署前暂停触发器以避免出现问题)
一种解决方案可能是创建自定义 powershell 脚本并在部署 ARM 模板后执行该脚本。您可以使用 Microsoft 提供的脚本中也使用的 Start-AzDataFactoryV2Trigger
cmdlet。
例如:
$ResourceGroupName = "my-resource-group"
$DataFactoryName = "my-data-factory'
$triggersToStart = @("trigger-1", "trigger-2", "trigger-3")
$triggersToStart | ForEach-Object {
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_ -Force
}
我暂时在ARM模板部署任务后添加了一个新的azure powershell任务来启动需要的触发器
ResourceGroupName、DataFactoryName、TriggersToStart 详细信息作为参数传递给脚本将启动触发器。这样我们就可以在每次部署期间 ADD/REMOVE 启用 的触发器。
下面是我用来获取参数并使用下面的脚本启动触发器的脚本。
param
(
[parameter(Mandatory = $false)] [String] $ResourceGroupName,
[parameter(Mandatory = $false)] [String] $DataFactoryName,
[parameter(Mandatory = $false)] [Array] $triggersToStart
)
Foreach($trigger_name in $triggersToStart)
{
Write-Host "Starting Trigger : " $trigger_name
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $trigger_name -Force
}