嗨,我有一个管道依赖挑战,并想出了许多可能的解决方案。我可以在实验室中全部尝试,但我想知道它们是否“在现场”工作良好,所以想知道是否有人尝试过它们?
我有 3 个阶段,每个阶段都有自己的 YML 文件。每个都是从主 YML 调用的,主 YML 是从主管道调用的。
- template: 'build.yml'
- template: 'deploy.yml'
- template: 'test.yml'
“deploy.yml”生成大量输出环境变量,其中 4 个由“test.yml”使用“stageDependencies”语法消耗:
stages:
- stage: 'Test_Stage'
dependsOn: Deploy_Stage
jobs:
job: 'Test_Job'
variables:
MyWebSite: [ stageDependencies.Deploy_Stage.Variables_Job.outputs['Variables_Job.Variables.MyWebSite'] ]
这很好用。
但是,我希望能够创建一个仅执行测试阶段的管道(以测试预先存在的网站)。这当然行不通,因为依赖dependsOn: Deploy_Stage。
我可以想到一些可能的解决方案:
无需依赖并使用 [stageDependencies...] 语法,而是将 MyWebSite 作为阶段之间的管道参数发送。(请注意,实际上参数不是 1,我只是简化以演示挑战。)如果这样做,测试人员会被提示填写(或从列表中选择)各种参数。但是,它确实在 Deploy_Stage 和 Test_Stage 之间建立了联系——我不知道这是否是件坏事?
将 Deploy_Stage 中的布尔参数传递给 Test_Stage,例如“CalledFromDeployStage”,然后在 Test_Stage 中执行以下操作:
stages:
- stage: 'Test_Stage'
${{ if eq(parameters.CalledFromDeployStage, true) }}:
dependsOn: Deploy_Stage
jobs:
job: 'Test_Job'
variables:
MyWebSite: [ stageDependencies.Deploy_Stage.Variables_Job.outputs['Variables_Job.Variables.MyWebSite'] ]
这感觉有点笨拙。
创建一个名为“Test_Stage_Manual”的新 YML,让它提示各种参数,其余的保持原样。(如果我这样做,我可能会将作业放入他们自己的 YML 文件中,并从两个测试阶段调用该 YML。)
还有什么?