如何在 azure devops yml 中使用变量组作为运行时参数
How to use variable group as a runtime parameter in azure devops yml
我想将变量组作为 运行 时间参数传递,这样每当我 运行 管道时,它应该允许我提供输入变量组名称,并基于在我的管道应该继续进行的 运行 时间内变量组的输入值。
我想在我们点击 运行 按钮时实现这一点,然后还有一个可变部分。所以,我希望你从那里接受变量组名称。
Pipeline.yml:
stages:
- stage: VMBackupandValidate
displayName: 'VM Backup and Validate using RSV'
jobs:
- job: VMBackupValidate
displayName: 'Azure VM Backup'
steps:
- task: AzurePowerShell@5
inputs:
azureSubscription: $(azure_sc)
ScriptType: 'FilePath'
ScriptPath: 'pipelines/automation/scripts/vmbackup.ps1'
ScriptArguments: '-ResourceGroupName $(ResourceGroupName) -Storagetype $(Storagetype) -SourceVMname $(SourceVMname) -RSVaultname $(RSVaultname) -Location $(Location) -WorkLoadType $(WorkLoadType) -Policyname $(Policyname) -Verbose'
azurePowerShellVersion: 'LatestVersion'
pwsh: true
假设您有两个变量组,名称分别为 prod 和 test。您可以使用以下管道:
trigger:
- main
parameters:
- name: environment
displayName: Where to deploy?
type: string
default: test
values:
- prod
- test
pool:
vmImage: ubuntu-latest
variables:
- group: ${{parameters.environment}}
steps:
- script: |
echo $(ENV)
echo $(VERSION)
displayName: Step 1 - print version and environment
- script: pwd ENV ${{parameters.environment}}
displayName: Step 2 - print parameter
您应该在两个变量组上定义 ENV
、VERSION
值。
你的舞台应该保持原样。在您的情况下,您将删除我提供的步骤并仅使用管道的第一部分
添加参考文章。
根据与OP的评论沟通。
我建议使用具有默认值的参数。如果需要其他值,它会要求您输入,在您点击 运行 之前,然后根据输入为 select 正确的变量设置条件。
这是管道的缩小示例:
parameters:
- name: environment
displayName: Deploy Environment
type: string
default: TEST
values:
- TEST
- PROD
trigger:
- 'none'
variables:
- name: environment
${{ if contains(parameters.environment, 'TEST') }}:
value: TEST
${{ if contains(parameters.environment, 'PROD') }}:
value: PROD
stages:
- stage: TEST
displayName: Build
condition: ${{ eq(variables.environment, 'TEST') }}
jobs:
- job:
pool:
vmImage: 'ubuntu-20.04'
steps:
- script: |
echo ${{ variables.environment}}
displayName: 'Print environment info'
您可以扩展逻辑,或将其替换为其他值并稍后在代码中使用它。您可以根据条件创建多个阶段,如图所示。
我想将变量组作为 运行 时间参数传递,这样每当我 运行 管道时,它应该允许我提供输入变量组名称,并基于在我的管道应该继续进行的 运行 时间内变量组的输入值。
我想在我们点击 运行 按钮时实现这一点,然后还有一个可变部分。所以,我希望你从那里接受变量组名称。
Pipeline.yml:
stages:
- stage: VMBackupandValidate
displayName: 'VM Backup and Validate using RSV'
jobs:
- job: VMBackupValidate
displayName: 'Azure VM Backup'
steps:
- task: AzurePowerShell@5
inputs:
azureSubscription: $(azure_sc)
ScriptType: 'FilePath'
ScriptPath: 'pipelines/automation/scripts/vmbackup.ps1'
ScriptArguments: '-ResourceGroupName $(ResourceGroupName) -Storagetype $(Storagetype) -SourceVMname $(SourceVMname) -RSVaultname $(RSVaultname) -Location $(Location) -WorkLoadType $(WorkLoadType) -Policyname $(Policyname) -Verbose'
azurePowerShellVersion: 'LatestVersion'
pwsh: true
假设您有两个变量组,名称分别为 prod 和 test。您可以使用以下管道:
trigger:
- main
parameters:
- name: environment
displayName: Where to deploy?
type: string
default: test
values:
- prod
- test
pool:
vmImage: ubuntu-latest
variables:
- group: ${{parameters.environment}}
steps:
- script: |
echo $(ENV)
echo $(VERSION)
displayName: Step 1 - print version and environment
- script: pwd ENV ${{parameters.environment}}
displayName: Step 2 - print parameter
您应该在两个变量组上定义 ENV
、VERSION
值。
你的舞台应该保持原样。在您的情况下,您将删除我提供的步骤并仅使用管道的第一部分
添加参考文章。
根据与OP的评论沟通。
我建议使用具有默认值的参数。如果需要其他值,它会要求您输入,在您点击 运行 之前,然后根据输入为 select 正确的变量设置条件。
这是管道的缩小示例:
parameters:
- name: environment
displayName: Deploy Environment
type: string
default: TEST
values:
- TEST
- PROD
trigger:
- 'none'
variables:
- name: environment
${{ if contains(parameters.environment, 'TEST') }}:
value: TEST
${{ if contains(parameters.environment, 'PROD') }}:
value: PROD
stages:
- stage: TEST
displayName: Build
condition: ${{ eq(variables.environment, 'TEST') }}
jobs:
- job:
pool:
vmImage: 'ubuntu-20.04'
steps:
- script: |
echo ${{ variables.environment}}
displayName: 'Print environment info'
您可以扩展逻辑,或将其替换为其他值并稍后在代码中使用它。您可以根据条件创建多个阶段,如图所示。