这种方法可以帮助某些人,所以我决定在这里发布它。
另一种“解决方法”是为这种情况提供的,可能有点“不干净”,因为每次执行模板时都需要显式指定参数,如果要传递很多参数,则不是一个好主意。(实际上,有一种方法,请参阅下面的改进版本)但是,如果您真的想要或者没有那么多参数,这应该可以工作:
逻辑是:您将所有参数存储在变量模板中,例如templates/vars.yml
:
variables:
- name: myVar1
value: MyValue1
- name: myVar2
value: MyValue2
既然你已经在变量中拥有了所需的所有内容,那么可能没有必要将变量导入模板本身,因为模板将在管道中执行,其中将导入您的变量,并且您可以像下面的示例一样明确替换它:
templates/my-template-setup-env.yml
的内容(不包含其中的变量):
steps:
- script: |
echo "$(myVar3)"
my-azure-pipeline.yml
的内容(包含导入变量模板):
name: my-cute-CI-name
trigger:
- main
pool:
vmImage: ubuntu-18.04
variables:
- template: templates/vars.yml
stages:
- stage: RunTheStage
displayName: 'Run first stage'
jobs:
- job: RunTheJob
displayName: 'Run your job'
steps:
- template: templates/my-template-setup-env.yml
parameters:
myVar3: $(myVar1)
改进版
但是,如果您在所有管道和模板中具有唯一的参数和变量命名,则可以安全地在模板使用期间不显式指定它,这也可以正常工作:
my-azure-pipeline.yml
的编辑和缩短版本(如果您在模板中具有相同的变量和参数名称):
variables:
- template: templates/vars.yml
...
steps:
- template: templates/my-template-setup-env.yml
templates/my-template-setup-env.yml
应该是这样的:
steps:
- script: |
echo "$(myVar2)" # not myVar3, since myVar3 is not in initial variables file templates/vars.yml
或者你需要将剩余的变量(在我们第一个例子中是myVar3)也添加到templates/vars.yml
文件中。