0

嗨,我有一个管道依赖挑战,并想出了许多可能的解决方案。我可以在实验室中全部尝试,但我想知道它们是否“在现场”工作良好,所以想知道是否有人尝试过它们?

我有 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。

我可以想到一些可能的解决方案:

  1. 无需依赖并使用 [stageDependencies...] 语法,而是将 MyWebSite 作为阶段之间的管道参数发送。(请注意,实际上参数不是 1,我只是简化以演示挑战。)如果这样做,测试人员会被提示填写(或从列表中选择)各种参数。但是,它确实在 Deploy_Stage 和 Test_Stage 之间建立了联系——我不知道这是否是件坏事?

  2. 将 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'] ]

这感觉有点笨拙。

  1. 创建一个名为“Test_Stage_Manual”的新 YML,让它提示各种参数,其余的保持原样。(如果我这样做,我可能会将作业放入他们自己的 YML 文件中,并从两个测试阶段调用该 YML。)

  2. 还有什么?

4

1 回答 1

1

您可以尝试如下:

  1. 创建单独的 YAML 管道以仅运行测试。

  2. 在主流水线的“ Deploy_Stage ”中,在该阶段的末尾添加一个步骤或作业,在该阶段前面的所有步骤和作业都成功完成后,执行API“ Runs - Run Pipeline ”触发流水线进行测试.

  3. 在调用“ Runs - Run Pipeline ” API 时,您可以通过 API的 Request Body(JSON 类型)将“ Deploy_Stage ”中生成的变量和参数传递给管道进行测试。

  4. 由于测试在单独的管道中,您可以根据需要手动触发此管道。手动触发时,可以手动设置管道中所需变量和参数的值。

通过这种方式,您可以通过“ Deploy_Stage ”和手动触发管道进行测试。

于 2021-05-06T06:01:21.840 回答