azure-pipelines.yml,如何覆盖管道变量

时间:2020-06-08 07:01:51

标签: azure-devops

我正在尝试学习如何为Azure Devops使用新的yaml配置的管道系统,并且在理解变量应该工作的方式方面遇到了一些麻烦。

设置管道时,它创建了一个文件azure-pipelines.yml并将其提交给master分支。

默认情况下,此文件看起来像这样...

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

我的项目使用以下构建配置进行设置...“ prod”,“ staging”,“ develop”。

我感到困惑的是,我应该在哪里覆盖实际管道的这些默认变量?

我可以直接在此文件中修改值,但这实际上是行不通的。当我将更改从“ master”合并回“ staging”等时,大概这些较低环境的管道将尝试使用“ prod”配置进行构建。

肯定有某种方法可以独立于源代码配置变量。

在2个地方可以看到添加变量的选项...

当我为管道选择“编辑”时,在右上角,旁边有一个“变量”按钮。

我可以在其中添加变量,但是它们似乎没有任何作用。当我运行管道时,不会应用它们。

另外,为了使情况更加混乱,当我选择“运行管道”时,还有一个选项可以定义变量,但是同样,这些变量似乎也无能为力。构建仍仅使用yaml文件中的预定义值运行。

2 个答案:

答案 0 :(得分:2)

同意Shayki Abramczyk。此方法可以手动覆盖UI界面上的变量值。

我想分享一种将值自动附加到变量的方法。

您可以使用Expressions来判断不同的情况(例如build分支)。然后您可以为不同情况设置值。

这里是一个例子:

trigger:
- '*'

pool:
  vmImage: 'windows-latest'

variables:
  ${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
    buildConfiguration: Prod
  ${{ if eq(variables['Build.SourceBranchName'], 'staging') }}:
    buildConfiguration: Staging  

steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      # Write your PowerShell commands here.

      Write-Host $(buildConfiguration)

此示例代码可以根据不同的触发器分支名称选择相应的值。 (母版:产品,登台:登台)

希望这会有所帮助。

答案 1 :(得分:0)

您可以使用Let users override this value when running this pipeline定义变量:

enter image description here

在构建步骤中,将变量与$(BuildConfiguration )一起使用。

运行构建时,您可以覆盖该值:

enter image description here

enter image description here

enter image description here