使用 Azure DevOps SDK 触发 YAML 管道中的意外阶段跳过行为

问题描述 投票:0回答:1

我们有一个包含多个阶段的 YAML 发布管道,定义了以下依赖项:

示例:

Stage: A

Stage: B

Stage: C
DependsOn:
- A 
- B

Stage: D

Stage: E

Stage: F
DependsOn:
 - D
 - E

问题: 我正在尝试从 .NET 工具触发此 YAML 版本,该工具使用 Azure DevOps SDK 中的 Microsoft.Azure.Pipelines.WebApi。

public int RunYamlPipeline(RunPipelineParameters runParam, int pipelineId)
{     
  VssConnection vssConnection = GetVssConnection();     
  PipelinesHttpClient pipelinesHttpClient = vssConnection.GetClient<PipelinesHttpClient>(Guid.NewGuid());    
  runParam.PreviewRun = false;   
  var result = pipelinesHttpClient.RunPipelineAsync(runParam, TfsSettings.TfsProjectName, pipelineId).Result     
  return result.Id;
}

在 RunPipelineParameters 中,我们传递 StagesToSkip。

当我使用提供的 StagesToSkip 作为“StageA,Stage D”从此方法触发管道时,观察到在管道运行中,阶段 C 被跳过,而阶段 F 运行成功完成。

当从 Azure DevOps UI 触发相同的管道并取消选择/跳过上述阶段时,阶段 C 和 F 都成功运行。

有人可以帮我理解为什么当工具触发管道时阶段 C 被跳过而阶段 F 运行吗?

azure azure-devops tfs azure-pipelines azure-pipelines-yaml
1个回答
0
投票

我无法重现该问题。当我在代码中将“A”和“D”添加到“StagesToSkip”时,阶段 A 和 D 被跳过,其余阶段成功运行,这与 Azure DevOps UI 取消选择/跳过阶段“A”和“的结果相同D”。

我的 YAML :

stages:
- stage: A
  jobs:
  - job: 

- stage: B
  jobs:
  - job: 

- stage: C
  dependsOn:
  - A 
  - B
  jobs:
  - job: 
    steps:
      - script: echo Hello C
- stage: D
  jobs:
  - job: 

- stage: E
  jobs:
  - job: 

- stage: F
  dependsOn:
  - D 
  - E
  jobs:
  - job: 
    steps:
      - script: echo Hello F

我在一个简单的控制台程序中的代码:

using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using Microsoft.Azure.Pipelines.WebApi;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {          
            // Define pipeline parameters
            RunPipelineParameters runParam = new RunPipelineParameters();
            runParam.StagesToSkip.Add("A");
            runParam.StagesToSkip.Add("D");

            int pipelineId = 140; // replace with your pipeline ID

            // Run the YAML pipeline
            int resultId = RunYamlPipeline(runParam, pipelineId);
            Console.WriteLine($"Pipeline run ID: {resultId}");
        }

        public static int RunYamlPipeline(RunPipelineParameters runParam, int pipelineId)
        {
            Uri orgUrl = new Uri("https://dev.azure.com/orgname");
            string pat = "";

            // Create a connection
            VssConnection vssConnection = new VssConnection(orgUrl, new VssBasicCredential(string.Empty, pat));

            PipelinesHttpClient pipelinesHttpClient = vssConnection.GetClient<PipelinesHttpClient>();
            runParam.PreviewRun = false;
            var result = pipelinesHttpClient.RunPipelineAsync(runParam, "projectname", pipelineId).Result;
            return result.Id;
        }

    }
}

测试结果:

code test result

当选择在 Azure DevOps UI 中跳过“A”和“D”时:

UI test result

请仔细检查您是否已通过代码中正确跳过值的阶段。

© www.soinside.com 2019 - 2024. All rights reserved.