Я пытаюсь передать переменную с одного этапа на другой, но почему-то она не работает. Я проверил другие ответы здесь, на Stackoverflow, но это не сработало (или, может быть, я делаю что-то неправильно)
Я пытаюсь передать переменную $NEW_VERSION на этап Cleanup
, но на выходе она пуста:
Это мой конвейер .yaml:
stages:
- stage: ImageDeployment
jobs:
- job: NewImageDeployment
timeoutInMinutes: 180
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureKeyVault@2
displayName: 'Fetch Secrets'
inputs:
connectedServiceName: '$(GLOBAL_SERVICE_CONNECTION)'
keyVaultName: $(GLOBAL_KV_NAME)
secretsFilter: "Packer-Secret"
runAsPreJob: false
- task: AzureCLI@2
displayName: 'Check image version'
retryCountOnTaskFailure: 0
inputs:
azureSubscription: '$(GLOBAL_SERVICE_CONNECTION)'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
while IFS=$'\t' read -a arr_image_versions; do
version=${arr_image_versions[0]}
date=${arr_image_versions[1]}
if [[ $date > $old_date ]]; then
last_version=$version
fi
old_date=$date
done <<< "$(az sig image-version list --gallery-image-definition xxxxxxx --gallery-name xxxxxxxx --resource-group xxxxxxxxx --query "[].[name, publishingProfile.publishedDate]" -o tsv)"
echo "Last image version: $last_version"
echo "##vso[task.setvariable variable=last_version]$last_version"
- task: Bash@3
name: CheckImageVersion
displayName: 'Increment image version'
inputs:
targetType: 'inline'
script: |
IFS='.' read -ra VERSION_PARTS <<< "$(last_version)"
PATCH_VERSION=${VERSION_PARTS[2]}
PATCH_VERSION=$((PATCH_VERSION + 1))
NEW_VERSION = "${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.$PATCH_VERSION"
echo "New image version: $NEW_VERSION"
echo "##vso[task.setvariable variable=NEW_VERSION;isOutput=true]$NEW_VERSION"
- template: tests/build_functionapp_testcase2.yaml@self
- template: tests/datafactory_testcase3.yaml@self
- stage: Cleanup
condition: failed()
jobs:
- job: DeleteImage
pool:
vmImage: 'ubuntu-latest'
variables:
NEW_VERSION: $[ stageDependencies.ImageDeployment.NewImageDeployment.outputs['CheckImageVersion.NEW_VERSION'] ]
steps:
- script: |
echo "NEW_VERSION in Cleanup stage: $(NEW_VERSION)"
- task: AzureCLI@2
displayName: 'Delete Packer Image'
inputs:
azureSubscription: '$(GLOBAL_SERVICE_CONNECTION)'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
echo "Deleting image version: $(NEW_VERSION)"
az sig image-version delete --gallery-image-definition xxxxxxxxxxxxxxxxxxxxxxx
На этапе «Cleanup
» вы пропустили опцию «dependsOn
», чтобы этап «Cleanup
» зависел от этапа «ImageDeployment
».
Отношения «dependsOn
» также гарантируют, что этап «Cleanup
» будет следовать за этапом «ImageDeployment
».
stages:
- stage: ImageDeployment
. . .
- stage: Cleanup
dependsOn: ImageDeployment
Если не установить связь «dependsOn
», этап «Cleanup
» не сможет получить выходные данные этапа «ImageDeployment
», когда есть другие этапы, которые также потребляют выходные данные этапа «ImageDeployment
».
Сопутствующая документация:
Обновлено:
Из предоставленного вами YAML я заметил, что вы используете два фиксированных шаблона. Если имена этапов, определенные в шаблонах, также фиксированы, на этапе «Cleanup
» вы можете напрямую предоставить список названий этапов для опции «dependsOn
».
stages:
- stage: ImageDeployment
. . .
# Some stages from templates.
. . .
- stage: Cleanup
dependsOn:
- ImageDeployment
- <name of stage_1 defined in templates>
- <name of stage_2 defined in templates>
. . .
- <name of stage_N defined in templates>
condition: failed()