【问题标题】:Can group name variable be dynamic in azure pipelines?天蓝色管道中的组名称变量可以是动态的吗?
【发布时间】:2019-10-07 01:14:38
【问题描述】:

我在 azure 上有两个环境。它们之间的一个区别仅是来自变量组的环境变量。是否可以为一个管道动态设置组名,而不是设置两个可以映射自己的组变量的管道? 这是我的构建管道的一个示例

trigger:
  - master
  - develop


jobs:

- job: DefineVariableGroups
   steps:
    - script: |
      if [ $(Build.SourceBranch) = 'refs/heads/master' ]; then
        echo "##vso[task.setvariable variable=group_name_variable;isOutput=true]beta_group"
      elif [ $(Build.SourceBranch) = 'refs/heads/develop' ]; then
        echo "##vso[task.setvariable variable=group_name_variable;isOutput=true]alpha_group"
      fi
    name: 'DefineVariableGroupsTask'
  - script: echo $(DefineVariableGroupsTask.group_name_variable)
    name: echovar # that works.

- job: Test
  dependsOn: DefineVariableGroups
  pool:
    vmImage: 'Ubuntu-16.04'
  variables:
    - group: $[ dependencies.DefineVariableGroups.outputs['DefineVariableGroupsTask.group_name_variable'] ]
    # that doesn't work. Error here
steps:
  - script: echo $(mode)
    displayName: 'test'

【问题讨论】:

  • 我不明白这个问题。每个环境都可以有一个与之关联的不同变量组。这是构建管道还是发布管道?
  • 抱歉问题不清楚。这是一个构建管道。我想要的是拥有一个与上述类似的构建管道。但我也想让它使用特定的变量组运行,该变量组的计算取决于分支名称
  • @alexche8,您能否分享完整的 YAML 文件,我无法使用当前 YAML 重现您的问题,它总是抛出错误“存在验证错误或警告,..不允许映射值在这种情况下。”对于行name: 'DefineVariableGroupsTask'?

标签: azure-devops yaml pipeline devops azure-pipelines


【解决方案1】:

我遇到了类似的问题,这对我有用:

例如,您正在尝试检索名为 dev-01 的组变量

    - name: currentStack
      value: ${{ format('$({0}-{1})', variables['env'], variables['location']) }}

【讨论】:

    【解决方案2】:

    我遇到了类似的情况,并认为我会分享我的结果。

    虽然理论上您可以在 管道 中使用组变量(假设权限设置正确)我发现 它不是 Azure DevOps 加载一个组的预期工作流管道中存在某种条件的另一个。

    所以我做的是:

    1. 对于管道,集中所有任务以生成您将在发布中使用的工件。请记住,它将针对触发器中包含的每个分支运行。
    2. 然后在Release中,选择工件并为每个环境创建不同的阶段,并将这些环境链接到适当的变量组。

    这样,Pipeline 可以由提交触发并为每个单独的分支运行,然后执行需要触发的 Release 部分中的组变量的任务创建工件时。因此,总而言之,我通过发布中的不同阶段过滤了我的条件,并在工作流中应用了该点所需的任何任务。

    我希望这可以帮助某人了解 管道发布 之间的结构和区别,并在第一次正确构建 DevOps 构建/发布工作流时节省时间 :)

    【讨论】:

      【解决方案3】:

      您可以使用的一种方法或解决方法是使用模板。 我确信最好的选择是动态使用“组变量”的可能性,虽然这是不可能的,但我相信这是一种选择。

      trigger:
        tags:
          include:
          - develop
          - qa
          - production
      
      variables:
      - name: defaultVar
        value:  'value define yml on project repo'
      - group: variables-example-outside
      
      
      resources:
        repositories:
          - repository: yml_reference
            type: github
            ref: refs/heads/yml_reference
            name: enamba/azure_devops
            endpoint: enamba
      
      jobs:
      - ${{ if eq(variables['Build.SourceBranch'], 'refs/tags/develop') }}: 
        - template: deploy.example.yml@yml_reference
          parameters:
            GroupVariablesName: variables-example-developer
      
      - ${{ if eq(variables['Build.SourceBranch'], 'refs/tags/qa') }}: 
        - template: deploy.example.yml@yml_reference
          parameters:
            GroupVariablesName: variables-example-qa
      
      - ${{ if eq(variables['Build.SourceBranch'], 'refs/tags/production') }}: 
        - template: deploy.example.yml@yml_reference
          parameters:
            GroupVariablesName: variables-example-production
      

      模板内部:

      parameters:
        GroupVariablesName: ''
      
      jobs:
      - job: deploy_app
        displayName: 'Deploy application'
        variables:
        - group: ${{ parameters.GroupVariablesName }}
        - group: variables-example-inside
      
        steps:
          - script: |
              echo outsidevar '$(outsidevar)'
              echo defaultVar '$(defaultVar)'
              echo var by tag '$(variable)'
      
      

      【讨论】:

        【解决方案4】:

        天蓝色管道中的组名变量可以是动态的吗?

        抱歉给您带来不便。

        恐怕目前还不支持。因此,我们必须在 YAML 管道中声明要使用的变量组。

        其他一些社区之前也提出了同样的要求,这个要求已经传递给产品团队,你可以从工单中查看详细信息:

        票务:Dynamic Variable Groups?

        注意:您可以为此反馈投票并添加您的 cmets。当有足够多的社区对此反馈进行投票并添加 cmets 时,产品团队成员将认真对待此反馈。

        希望这会有所帮助。

        【讨论】:

        • 谢谢,我订阅了这个问题来跟踪它。
        猜你喜欢
        • 2021-05-25
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        • 2022-07-13
        • 1970-01-01
        • 2020-05-19
        • 2021-11-01
        • 2021-11-23
        相关资源
        最近更新 更多