gpt4 book ai didi

azure - 逻辑应用标准自动化跨环境工作流引用

转载 作者:行者123 更新时间:2023-12-03 02:15:33 24 4
gpt4 key购买 nike

我已使用 Arm 模板通过 Azure Devops Pipeline 自动部署逻辑应用标准

我有另一个管道,它使用 Azure Devops zip 部署任务来部署工作流(按照 Microsoft 文档的建议)。

我目前的困境是当我有调用其他工作流程的工作流程时。当我跨不同逻辑应用标准实例部署 zip 文件时,引用的工作流 URL 始终相同

如何以非硬编码且在部署中动态更改的方式引用/调用工作流程?我可以使用 workflow() 引用其他工作流程吗?

由于访问键是工作流的属性,而不是逻辑应用标准,我无法将其设置为要在工作流内使用的应用设置或参数。

关于如何绕过这个问题有什么想法吗?

最佳答案

我最终做了以下事情。我已经创建了 keystore secret 。在这些 key 保管库 secret 中,我存储包含授权 secret 的工作流程 URL。

由于我创建了指向 key 保管库 secret 名称而不是硬编码 URL 的其他工作流,逻辑应用在运行时将查询 key 保管库,从我想要进行身份验证的工作流中检索 URL 并将其用作输入。由于它已经包含签名,因此可以正确进行身份验证。

这可能是一种解决方法,但这是我能够在此操作中取得成功的唯一方法。

对于那些和我有同样问题的人,步骤如下:

  1. 首先,我开发了从 keyvault 获取包含 url 的 secret 的工作流程

Get keyvault secret

  • 然后它使用 key 作为输入来调用 url。 Secret as input for the url

  • 当我准备好部署工作流程时。我导出它们并将代码放在 Azure Devops 上。

  • 然后在构建管道中我使用以下任务

  • task: ArchiveFiles@2
    displayName: "Archive Functions"
    inputs:
    rootFolderOrFile: "$(Build.Repository.LocalPath)/LogicApps"
    includeRootFolder: false
    archiveFile: "$(Build.ArtifactStagingDirectory)/LogicApps.zip"

    task: AzureFunctionApp@1
    displayName: "Deploy Functions"
    inputs:
    azureSubscription: "${ { parameters.Subscription }}"
    appName: "mylogicappstandard"
    package: "$(Agent.BuildDirectory)/${ { parameters.ArtifactName}}/LogicApps.zip"

    task: AzureCLI@2
    displayName: 'Update Signature url in ${ { parameters.KeyvaultName}}'
    inputs:
    azureSubscription: "${ { parameters.Subscription }}"
    scriptType: 'ps'
    scriptLocation: 'inlineScript'
    inlineScript: "$(Agent.BuildDirectory)/${ { parameters.ArtifactName}}/Scripts/Get-WorkflowUrlSignature.ps1 $(AzureSubscriptionId) ${ { parameters.ResourceGroup }} mylogicappstandard ${ { parameters.KeyvaultName}}"

    您可以在此处找到脚本的详细信息 Get-WorkflowUrlSignature.ps1

        [CmdletBinding()]
    param (
    [Parameter(Mandatory)][string]$SubscriptionId,
    [Parameter(Mandatory)][string]$ResourceGroup,
    [Parameter(Mandatory)][string]$LogicAppName,
    [Parameter(Mandatory)][string]$KeyVaultName
    )

    $json = az rest --method get --uri "https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroup/providers/Microsoft.Web/sites/$LogicAppName/hostruntime/runtime/webhooks/workflow/api/management/workflows?api-version=2018-11-01"
    $workflows = $json | convertfrom-json

    foreach ($workflow in $workflows.Name){
    $uri ="https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroup/providers/Microsoft.Web/sites/$LogicAppName/hostruntime/runtime/webhooks/workflow/api/management/workflows/$workflow/triggers/manual/listCallbackUrl?api-version=2018-11-01"
    if (az rest --method post --uri $uri){
    # Gets the url with signature
    $sigurl = az rest --method post --uri $uri | convertfrom-json
    $secret = $sigurl.value.Replace('&','"&"')
    $workflowName = $workflow.Replace("_","")
    #Creates or updates secret in the keyvault
    Write-Output "Updating secret $workflowName in the keyvault"
    az keyvault secret set --name $workflowName --vault-name $KeyVaultName --value $secret
    }else{
    Write-Output "The workflow $workflow does not have any trigger url"
    }
    }

    我希望这可以帮助其他人自动化该过程。如果您有更简单的方法或查询访问 key 或网址签名,请告诉我。

    关于azure - 逻辑应用标准自动化跨环境工作流引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71355379/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com