Azure Pipelines:FinalJob依赖未识别TestJob/TestJob2问题求助
问题解决:FinalJob依赖未知作业的错误与需求实现
错误原因
是的,问题根源就是TestJob和TestJob2的${{ if }}条件渲染逻辑。当parameters.FLAG为true时,TestJob不会被生成;为false时,TestJob2不会被生成。但FinalJob的dependsOn硬编码了两个作业名称,Azure Pipelines在编译阶段会检查所有依赖的作业是否存在,找不到就会抛出FinalJob Job depends on unknown TestJob job这类错误。
解决方案
要实现仅当实际生成的TestJob/TestJob2成功时触发FinalJob,同时不显示未执行的作业名称,需要让FinalJob的dependsOn列表和condition也跟着parameters.FLAG动态渲染,只关联实际存在的作业:
修改后的azure-pipelines.yml中FinalJob部分如下:
- job: FinalJob displayName: Final Job.. dependsOn: # 仅当FLAG为false时,依赖TestJob ${{ if eq(parameters.FLAG, false) }}: - TestJob # 仅当FLAG为true时,依赖TestJob2 ${{ if eq(parameters.FLAG, true) }}: - TestJob2 # 动态生成对应作业的成功条件 condition: | ${{ if eq(parameters.FLAG, false) }}: eq(dependencies.TestJob.result, 'Succeeded') ${{ if eq(parameters.FLAG, true) }}: eq(dependencies.TestJob2.result, 'Succeeded') steps: - checkout: none - task: Bash@3 displayName: 'Final script' inputs: targetType: 'filePath' filePath: './scripts/my-script.sh'
方案说明
- 动态渲染
dependsOn:确保FinalJob只依赖实际生成的作业,避免编译阶段的依赖不存在错误 - 动态渲染
condition:只判断存在的作业的执行结果,不会出现引用未生成作业的dependencies的问题 - 未满足条件的TestJob/TestJob2不会被定义,因此Azure Pipelines界面不会显示这些作业的名称,完全符合你的需求
内容的提问来源于stack exchange,提问作者depreston
相关产品推荐
相关产品推荐

