Azure devops ADF部署时的触发器状态更新

Azure devops ADF部署时的触发器状态更新,azure-devops,azure-data-factory,azure-data-factory-2,azure-data-factory-pipeline,azure-devops-pipelines,Azure Devops,Azure Data Factory,Azure Data Factory 2,Azure Data Factory Pipeline,Azure Devops Pipelines,我正在使用azuredevops管道将adfarm模板从DEV实例部署到PROD 下面是我所遵循的部署步骤。 Microsoft提供的用于在部署前停止触发器的脚本 ARM模板部署 Microsoft提供的用于启动触发器和删除JSON文件中未包含的资源的脚本。 在下面页面的标题下部署前和部署后脚本示例 我有大约20个触发器,其中15个处于运行状态,5个在PROD中停止一段时间。 在我的开发实例中,所有触发器都处于停止状态,以避免不必要的管道运行。 但在部署到PROD时,我需要将20个触发器中的

我正在使用azuredevops管道将adfarm模板从DEV实例部署到PROD

下面是我所遵循的部署步骤。

  • Microsoft提供的用于在部署前停止触发器的脚本
  • ARM模板部署
  • Microsoft提供的用于启动触发器和删除JSON文件中未包含的资源的脚本。 在下面页面的标题下部署前和部署后脚本示例
  • 我有大约20个触发器,其中15个处于运行状态,5个在PROD中停止一段时间。 在我的开发实例中,所有触发器都处于停止状态,以避免不必要的管道运行。 但在部署到PROD时,我需要将20个触发器中的15个设置为启动状态

    为了实现这一点,我在模板参数化中添加了触发器的runtimeState,现在我可以在ARM模板部署任务中选择触发器状态from Override Parameters选项,如下所示。

    现在的问题是在PROD部署之后,所有触发器都处于Stopped状态,仅与DEV实例中相同

    即使runtimeState在部署时被覆盖,但部署后它不会反映在PROD实例中

    经过分析,我怀疑问题在于Microsoft的start trigger脚本引用了DEV的ARMTemplateForFactory.json文件,其中所有触发器的状态都已停止。

    如何解决这个问题?我必须在从DEV部署到PROD时更新每个触发器作业的触发器状态

    在来自Microsoft的停止/启动触发器脚本中,它从Json文件获取要启动的触发器列表,我们通过构建管道从DEV实例获取该文件。将不会采用覆盖管道状态来启动触发器。

    我找到的解决方案之一是在ARM部署后显式地启动触发器。为此,我找到了一份如下所示的代理工作。

    但是这个工作的问题是我不能一次提供多个触发器的名称。我可以提供单个触发器的名称,如下所示


    有没有办法在此作业中添加多个触发器名称?

    请检查以下事项:

  • 在本地计算机上尝试相同的脚本,看看它们是否能按预期工作

  • 如果脚本在本地计算机上也无法工作,则问题应该在ADF或脚本上,而不是Azure DevOps上。检查ADF或脚本中是否有任何不正确的配置

  • 如果脚本可以在本地计算机上按预期工作,请尝试在本地计算机上安装自托管代理以运行管道,查看它是否可以按预期工作


  • 如您所述,Microsoft提供的部署前-部署后脚本在部署前暂停所有活动触发器,然后在部署后将它们恢复到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任务,以启动所需的触发器

    ResourceGroupNameDataFactoryNameTriggersToStart详细信息作为启动触发器的脚本的参数传递。因此,我们可以在每次部署期间添加/删除启用
    的触发器。

    下面是我用来获取参数并使用下面的脚本启动触发器的脚本

    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 powershell任务,通过将触发器名称作为脚本的参数传递给strart Triggers