天蓝色管道中的组名称变量可以是动态的吗?
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 管道的输入