Я пытаюсь установить переменную динамически в задаче на одном этапе, а затем передать ее в шаблон (который имеет несколько других этапов) в качестве параметра. Но это не работает для меня. Можете ли вы дать мне знать, если я делаю здесь что-то не так?
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
Выходные переменные — это переменные времени выполнения. Однако параметры расширяются непосредственно перед запуском конвейера, поэтому значения выходных переменных не могут быть переданы в параметры.
Предлагается использовать переменные в вашем шаблоне и сопоставлять выходные переменные с переменными в вашем шаблоне.
Рассмотрим следующий пример для более интуитивного понимания.
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
показаны ниже.