Azure Devops 支持将一个步骤的输出变量作为下一步的输入传递。看这张票 https://stackoverflow.com/a/62693182/10910450:
我们可以这样命名一个步骤:
steps:
- script: echo test
name: ScriptName
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host '##vso[task.setvariable variable=xxx;isOutput=true;]xxx'
name: PSName
The name
必须是唯一的,以便我们可以使用格式$(referencename.variablename)
访问特定步骤的输出变量。
该错误表明模板中的某些步骤具有相同的名称version
!并且这是不支持的。关于出现此问题的原因:
1.您多次调用同一个模板,这是您问题的主要原因。
DevOps 在以下情况下首先扩展模板处理管道 https://learn.microsoft.com/en-us/azure/devops/pipelines/process/runs?view=azure-devops#process-the-pipeline,所以如果你的fetch-tag
模板有一个名为version
,最终消耗的 azure-pipeline.yml 将是:
stages:
- stage: Terraform
jobs:
- job: Build
displayName: Build Terraform Infra
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Hello World"
name: version
...
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Hello World"
name: version
...
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Hello World"
name: version
...
2.您可能还需要检查不同模板中是否存在同名步骤。
我们可以在一个管道中多次调用相同的模板,但是我们不能调用其中存在的相同模板命名步骤。因为管道将多次扩展模板,并且最终管道将包含许多具有相同名称的步骤。并且不支持这一点,因为名称应该是唯一的。
解决方案:
1.删除name
如果您不需要使用上面提到的输出变量,请使用步骤的元素。
2.或者您可以复印几份fetch-tag.yml
并将它们命名为 fetch-tag-api.yml、fetch-tag-front.yml 和 fetch-tag-strapi.yml。重命名参考名称version
在这三个文件中改为version1、version2或者什么。然后您可以使用以下命令运行管道:
steps:
# Set and Export env var for api version to deploy
- template: templates/fetch-tag-api.yml
parameters:
repo: 'api'
envVar: TERRAFORM_API_TAG
# Set and Export env var for front version to deploy
- template: templates/fetch-tag-front.yml
parameters:
repo: 'front'
envVar: TERRAFORM_FRONT_TAG
# Set and Export env var for strapi version to deploy
- template: templates/fetch-tag-strapi.yml
parameters:
repo: 'strapi'
envVar: TERRAFORM_STRAPI_TAG