对于我的主存储库(假设rmetzger/flink
),我想将Azure Pipelines构建作业发送到我自己的运行非常强大的构建计算机的代理池。
对于任何分叉我的存储库的人,我想在Azure提供的生成计算机上运行其生成。
要实现这一目标,我相信使用Jobs和Conditions是正确的方法。
我想定义两个非常相似的作业,每个作业都有一个条件来检查存储库是否为rmetzger/flink
。
这是我的azure-pipelines.yml
文件的相关部分:
jobs:
- job: runOnStrongMachines
condition: eq(variables['Build.Repository.Name'], 'rmetzger/flink')
pool:
name: Default
steps:
- ...
- job: runOnAzure
condition: not(eq(variables['Build.Repository.Name'], 'rmetzger/flink'))
pool:
vmImage: 'ubuntu-latest'
steps:
- ...
运行此命令,variables['Build.Repository.Name']
始终求值为null
,因此始终执行第二个作业。
我担心predefined Build.Repository.Name
variable的作用域会导致在构建的早期阶段无法访问。
答案 0 :(得分:1)
我担心预定义的Build.Repository.Name变量的作用域为 一种在构建的早期阶段无法访问的方式。
是的,正确。 Build.Repository.Name
不能在构建的早期阶段使用。而且,“构建的早期阶段”确切地表示职位水平。实际上,您在问题中提到的doc link已经宣布此变量是代理作用域的:
如本文档所述,此预定义变量Build.Repository.Name
仅可用于脚本/任务级别。并且在您的脚本中,在Job条件中使用此变量的范围是job级别而不是agent级别。这就是为什么您收到null
的原因。
解决方法是,可以使用此变量step/task
在每个Build.Repository.Name
中设置条件。或者,为方便起见,在工作开始时添加一个步骤,以尽早退出工作。