我们有一个包含多个阶段的 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 运行吗?
我无法重现该问题。当我在代码中将“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;
}
}
}
测试结果:
当选择在 Azure DevOps UI 中跳过“A”和“D”时:
请仔细检查您是否已通过代码中正确跳过值的阶段。