Azure devops 创建可以从其他阶段调用或手动调用的阶段?

Azure devops 创建可以从其他阶段调用或手动调用的阶段?,azure-devops,azure-devops-pipelines,azure-devops-yaml,Azure Devops,Azure Devops Pipelines,Azure Devops Yaml,您好,我遇到了一个管道依赖性挑战,并想出了许多可能的解决方案。我可以在实验室里全部试用,但问题是,我想知道它们在“现场”是否工作良好,因此想知道是否有人试用过它们 我有3个阶段,每个阶段都有自己的YML文件。每一个都是从主管道调用的主YML调用的 - template: 'build.yml' - template: 'deploy.yml' - template: 'test.yml' “deploy.yml”生成大量输出环境变量,其中4个由使用“stageDependencies”语法的“

您好,我遇到了一个管道依赖性挑战,并想出了许多可能的解决方案。我可以在实验室里全部试用,但问题是,我想知道它们在“现场”是否工作良好,因此想知道是否有人试用过它们

我有3个阶段,每个阶段都有自己的YML文件。每一个都是从主管道调用的主YML调用的

- template: 'build.yml'
- template: 'deploy.yml'
- template: 'test.yml'
“deploy.yml”生成大量输出环境变量,其中4个由使用“stageDependencies”语法的“test.yml”使用:

这很有效

但是,我希望能够创建一个只进行测试阶段的管道(测试预先存在的网站)。这当然不起作用,因为依赖dependsOn:Deploy\u阶段

我可以想出一些可能的解决办法:

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

  • 将布尔参数从部署阶段传递到测试阶段,如“CalledFromDeployStage”,然后在测试阶段执行以下操作:

  • 这感觉有点笨重

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

  • 还有别的吗


  • 您可以按如下方式进行尝试:

  • 创建单个YAML管道以仅运行测试

  • 在主管道的“Deploy\u Stage”中,在该阶段结束时添加一个步骤或作业以执行API“”,以在该阶段中的所有先前步骤和作业成功完成后触发管道进行测试

  • 调用“运行-运行管道”API时,可以通过API的请求主体(JSON类型)将“部署阶段”中生成的变量和参数传递给管道进行测试

  • 由于测试在单个管道中,如果愿意,可以手动触发此管道。手动触发时,您可以手动设置管道中所需变量和参数的值

    - template: 'build.yml'
    - template: 'deploy.yml'
    - template: 'test.yml'
    

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

    这是一个聪明的想法!与此相反:Pipeline1:Build_Stage-->Deploy_Stage-->Test_Stage Pipeline2:Test_Stage我这样做:Pipeline1:Build_Stage-->Deploy_Stage-->Pipeline2:Test_Stage与我的选项3类似,但这意味着我在阶段和管道之间保持1:1的映射,因此它是一个更干净的解决方案。非常感谢。(格式化。)
    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'] ]