创建可以从另一个阶段调用或手动调用的阶段?

问题描述

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

我有 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'] ]

这很好用。

但是,我希望能够创建一个只执行测试阶段的管道(以测试预先存在的网站)。由于依赖关系,这当然不起作用: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. 还有别的吗?

解决方法

您可以尝试如下:

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

  2. 在主管道的“Deploy_Stage”中,在此阶段的末尾添加一个步骤或作业来执行 API“Runs - Run Pipeline”以触发管道在此阶段之前的所有步骤和作业都成功完成后进行测试。

  3. 在调用“Runs - Run Pipeline”API 时,您可以将“Deploy_Stage”中生成的变量和参数通过API 的请求正文(JSON 类型)。

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

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