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

Posted

技术标签:

【中文标题】天蓝色管道中的组名称变量可以是动态的吗?【英文标题】: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'? 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

所以我做的是:

    对于管道,集中所有任务以生成您将在发布中使用的工件。请记住,它将针对触发器中包含的每个分支运行。 然后在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 时,产品团队成员将认真对待此反馈。

希望这会有所帮助。

【讨论】:

谢谢,我订阅了这个问题来跟踪它。

以上是关于天蓝色管道中的组名称变量可以是动态的吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ACR(天蓝色容器注册表)作为 Azure Devops json 管道的输入

有没有办法更新 Azure DevOps 管道中的变量组变量?

在天蓝色管道发布期间更新 SSAS 表格连接字符串

Matlab可以用imshow命令显示蓝色吗

执行天蓝色功能后卸载程序集

天蓝色 Web 应用配置设置中的“密钥保管库引用错误”