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

Create Stage that can be Called from Another Stage or Manually?

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

我有 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. 还有别的吗?

您可以尝试如下:

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

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

  3. 调用“运行s - 运行 Pipeline”API时,可以传递变量和“Deploy_Stage”中生成的参数通过API.[=11=的Request Body(JSON类型)传递给pipeline进行测试]

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

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