使用Azure DevOps yaml管道,我的变量扩展工作,如果变量设置在根,但不是如果他们在舞台上。谁能解释一下我需要做什么才能得到变量扩展工作与变量设置在阶段?
#azure-pipelines.yml
# If I uncomment the lines below my variable expansion will work
# variables:
# - group: Foo
stages:
- stage: Bar
# If I uncomment the lines below my variable expansion will **not** work
# variables:
# - group: Foo
jobs:
- deployment:
# The expansion of $(environment) below...
# - works if the variables are set in the root
# - fails if the variables are set in the stage (error message: Environment $(environment) could not be found. )
environment: $(environment)
我认为这里有两个问题。一种情况是,当"environment"是部署阶段的预定义变量时,您正在尝试使用该变量名。关于预定义变量,请参阅azure文档:https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#deployment-job-variables-devops-services
你可以看到环境在列表的第一个,所以它覆盖了你的。
因此,由于变量名是在部署作业上预定义的,因此无法为该作业设置它。
您应该切换到与预定义变量不同的变量名。
第二个问题是,阶段的变量在阶段运行时被拉入,但环境是该部署的定义。这意味着它需要在运行之前访问该变量,以便编译管道文件。导致鸡和蛋的问题。通常,如果您希望部署环境是动态的,我建议使用管道参数和模板表达式来动态设置环境。这是因为参数在管道文件的编译时可用。
https://learn.microsoft.com/en-us/azure/devops/pipelines/process/runtime-parameters?view=azure-devops
希望对你有帮助。