Назначение переменной времени выполнения с другого этапа параметру шаблона

Я пытаюсь установить переменную динамически в задаче на одном этапе, а затем передать ее в шаблон (который имеет несколько других этапов) в качестве параметра. Но это не работает для меня. Можете ли вы дать мне знать, если я делаю здесь что-то не так?

stages:  
  - ${{ if eq(variables['Build.Reason'], 'ResourceTrigger') }}:
    - stage: StageA
      jobs:
      - job: JobA
        steps:
        - checkout: self
        - task: DownloadPipelineArtifact@2    
          inputs:
            buildType: 'specific'
            project: 'Project'
            artifactName: 'Environment.properties'
            targetPath: $(Build.SourcesDirectory)/Configurations/
            pipeline: 'test'
            runVersion: 'latest'
            
        - task: Bash@3
          displayName: Reset Environment details 
          name: SetEnv
          inputs:
            targetType: 'inline'
            script: |
              wrapper_environment=$(cat $(Build.SourcesDirectory)/Configurations/Environment.properties | grep Environment= | head -1 | cut -d '=' -f 2)
              wrapper_environment_for_services=$(cat $(Build.SourcesDirectory)/Configurations/Environment.properties | grep EnvSer= | head -1 | cut -d '=' -f 2)
              echo $wrapper_environment
              echo $wrapper_environment_for_services
              echo "##vso[task.setvariable variable=wrapper_environment;isOutput=true;]$wrapper_environment"
              echo "##vso[task.setvariable variable=wrapper_environment_for_services;isOutput=true]$wrapper_environment_for_services"
              cat $(Build.SourcesDirectory)/Configurations/Environment.properties
 
        
    - template: run/run_tests_template.yml@tests 
      parameters: 
        variable_group_name:  Sanity_variablegroup
        environment: $[ stageDependencies.StageA.JobA.outputs['SetEnv.wrapper_environment']]
        environment_for_services: $[ stageDependencies.StageA.JobA.outputs['wrapper_environment_for_services']]
        screenshot_required: $(screenshot_required)
        grid: $(grid)
        gridURL: $(gridURL)
        desktopBrowser: $(desktop_browser)
        # Testing only - delete later
        publish_test_results: true
        delete_pod : true
        download_property: true

60
1

Ответ:

Решено

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

Предлагается использовать переменные в вашем шаблоне и сопоставлять выходные переменные с переменными в вашем шаблоне.

Рассмотрим следующий пример для более интуитивного понимания.

main.yml: Определите выходную переменную wrapper_environment.

stages:  
- stage: StageA
  jobs:
  - job: JobA
    steps:
      - task: Bash@3
        displayName: Reset Environment details 
        name: SetEnv
        inputs:
          targetType: 'inline'
          script: |
            echo "##vso[task.setvariable variable=wrapper_environment;isOutput=true;]dev"

- template: template.yml
  parameters:
    environment: $[ stageDependencies.StageA.JobA.outputs['SetEnv.wrapper_environment']]

template.yml: сопоставьте выходную переменную с переменной уровня сцены myNewEnvironment.

parameters:
- name: environment
  displayName: environment
  type: string
  default: 'test'

stages:
- stage: StageB
  dependsOn: StageA
  variables:
    myNewEnvironment: $[stageDependencies.StageA.JobA.outputs['SetEnv.wrapper_environment']]
  jobs:
  - job: jobB
    steps:
    - script: |
        echo 'the value of parameter.environment is ${{ parameters.environment}}'
        echo 'the value of myNewEnvironment is $(myNewEnvironment)'

Значения переменной myNewEnvironment и параметра environment показаны ниже.