YAML конвейер - установить переменную и использовать в выражении для шаблона - PullRequest
1 голос
/ 02 октября 2019

Я пытаюсь динамически установить переменную в одной задаче и использовать ее в условии для следующей задачи. Я могу заставить это работать на всех. Переменная устанавливается, но шаблоны не выполняются.

Шаг powershell устанавливает переменную, следующие шаги предназначены для условного выполнения этой переменной

variables:
- group: Global

trigger:
  branches:
    include:
    - master
  paths:
    include:
    - blah1/*.csv
    - blah2/*.csv

resources:
  repositories:
  - repository: Templates
    name: Templates/Templates
    type: git

pool:
  vmImage: vs2017-win2016
  demands: azureps

steps:
- powershell: |
   $CSV_File = Get-ChildItem -Recurse -Include "*.csv" | sort LastWriteTime | select -last 1
   $Subscription = [regex]::Matches(($CSV_File | select -ExpandProperty DirectoryName), "([^\\]+)$").Value

   #Set Variable for Pipeline
   Write-Host "##vso[task.setvariable variable=Subscription]$Subscription"

  displayName: 'PowerShell - Set Subscription'
  name: 'SetSubscription'

- ${{ if eq(variables['SetSubscription.Subscription'], 'DEV1') }}:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'DEV1 (GUID)'

- ${{ if eq(variables.Subscription, 'PROD1') }}:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'PROD1 (GUID)'

- ${{ if eq(variables['Subscription'], 'DEV2') }}:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'DEV2 (GUID)'

- ${{ if eq(variables['SetSubscription.Subscription'], 'PROD2') }}:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'PROD2 (GUID)'

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Я не думаю, что это сработает, потому что процесс сборки решается до того, как будут выполнены шаги, поэтому вы не можете реально использовать переменные времени сборки, чтобы определить, должен ли шаг выполняться

1 голос
/ 03 октября 2019

РЕДАКТИРОВАТЬ: я нашел способ сделать это в той же сборке

Метод 1 - Та же сборка

jobs:
- job: PreTasks
  steps:
  - powershell: |
      $Subscription = Get Var Command here

      #Set Variable for Pipeline
      Write-Host "##vso[task.setvariable variable=Subscription;isOutput=true]$Subscription"
    name: SetSubscription
    displayName: 'PowerShell - Set Subscription'
    env:
      AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)

- job: 1
  dependsOn: PreTasks
  condition: eq(dependencies.PreTasks.outputs['SetSubscription.Subscription'], 'DEV1')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'DEV1 (GUID)'

- job: 2
  dependsOn: PreTasks
  condition: eq(dependencies.PreTasks.outputs['SetSubscription.Subscription'], 'PROD1')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'PROD1 (GUID)'

- job: 3
  dependsOn: PreTasks
  condition: eq(dependencies.PreTasks.outputs['SetSubscription.Subscription'], 'DEV2')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'DEV2 (GUID)'

- job: 4
  dependsOn: PreTasks
  condition: eq(dependencies.PreTasks.outputs['SetSubscription.Subscription'], 'PROD2')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'PROD2 (GUID)'

Метод 2 - Отдельные сборки Спасибо @ 4c74356b41. В итоге мне пришлось разделить задачи на 2 отдельные сборки и преобразовать описанный выше процесс в задания вместо задач. Я привязал группу переменных к обеим сборкам, и сборка 1 обновляет переменную в группе переменных, а триггеры сборки 2 - из сборки 1.

сборка 1

- powershell: |
   echo $env:AZURE_DEVOPS_EXT_PAT | az devops login
   az devops configure -d organization=https://dev.azure.com/<Organisation>/project=<project>

   az pipelines variable-group variable update --id <VariableGroupID> --name Subscription --value $Subscription

  displayName: 'PowerShell - Set Subscription'
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)

сборка 2 - запускается из сборки 1

jobs:
- job: 1
  condition: eq(variables.Subscription, 'DEV1')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'DEV1 (GUID)'
- job: 2
  condition: eq(variables.Subscription, 'PROD1')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'PROD1 (GUID)'
- job: 3
  condition: eq(variables.Subscription, 'DEV2')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'DEV2 (GUID)'
- job: 4
  condition: eq(variables.Subscription, 'PROD2')
  steps:
  - template: Template/Template.yml@Templates
    parameters:
      AzureSubscription: 'PROD2 (GUID)'
...