从同一构建触发多个版本

问题描述 投票:0回答:1

我正在使用 Azure DevOps CI/CD 和逻辑应用程序。

在构建中,我设法提取修改了哪些逻辑应用程序,并将列表保存在我添加到工件中的 .txt 中。

我想根据此列表的条目触发多个版本,即每个修改的逻辑应用程序的新版本。可以吗?如果是的话,我应该:

  • 在构建中执行此操作并从那里触发发布
  • 在发布中执行此操作并在那里触发部署

除了帮助我做出正确的决定之外,任何有关如何实际编写触发发布的循环的进一步帮助都会有很大帮助:)

我正在等待触发 Azure DevOps Pipeline 的批准,以便我可以尝试,但除此之外,我不知道从哪里开始从同一构建触发多个版本。

azure azure-devops continuous-integration azure-logic-apps continuous-deployment
1个回答
0
投票

我想根据此列表的条目触发多个版本,即每个修改的逻辑应用程序的新版本。可以吗?如果是,我应该:在构建中执行此操作并从那里触发发布吗?在发布中执行此操作并在那里触发部署?

是的,可以做到。由于您已经在构建中拥有了 txt,更好的方法是在构建中执行上述步骤,以触发每个版本。

其实主要有两个步骤:

  1. 解析txt文件,根据列表中的条目创建循环。

  2. 在循环中,触发发布管道。

有很多方法可以从构建中触发发布,例如(不是全部):

  1. 发布 - 创建rest api
  2. az pipelines 发布 CLI
  3. 扩展任务,例如:TriggerPipeline@2
  4. 释放触发器

如果你使用Yaml而不是经典编辑器创建发布,你可以使用所有构建触发方法,更多。

您应该根据自己的实际情况选择最好的方式。例如,如果您想触发释放和转移

variable value
来使用,您可以使用上面的rest api。

由于我没有您的 txt 文件内容,因此我们假设为示例的 ModifiedLogicApps.txt 中的每一行触发释放。

pool:
  vmImage: ubuntu-latest

steps:
- powershell: |
    $modifiedLogicApps = Get-Content -Path ModifiedLogicApps.txt

    # Loop through each Logic App and trigger a release
    foreach ($logicApp in $modifiedLogicApps) {
        Write-Host "Triggering release for Logic App: $logicApp"

        # Set your Azure DevOps Personal Access Token (PAT)
        $token = "$(PAT)"

        # Convert the token to base64
        $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

        # Define the release pipeline definition ID
        $definitionId = 2  # Replace with your actual release pipeline definition ID

        # Define the Azure DevOps organization
        $organization = "https://dev.azure.com/$(orgname)"
 

        # Define any additional variables you want to pass and create the release payload
        $releasePayload = @{
            definitionId = $definitionId
            variables = @{
                logicapp = @{
                    value = $logicApp
                }
            }
        }

        # Convert the payload to JSON
        $releasePayloadJson = $releasePayload | ConvertTo-Json

        # Define the REST API URL for creating a release
        $apiUrl = "https://vsrm.dev.azure.com/$(orgname)/$(project)/_apis/release/releases?api-version=7.1-preview.8"

        echo $apiUrl      # check url

        # Invoke the REST API to trigger the release
        Invoke-RestMethod -Uri $apiUrl -Method Post -Body $releasePayloadJson -ContentType "application/json" -Headers @{Authorization = "Basic $token"}
      }

在您的发布管道中,请预定义变量并选择

settable at release time

我会输出release中的$(logicapp)值来检查:

构建后,每个逻辑应用将创建一个新的发布运行:

并且它在每个版本中都有可变值输出,

different

© www.soinside.com 2019 - 2024. All rights reserved.