APIからビルドをQueueに積むのは専用のAPIがあります。
では、いったんQueueに積まれたビルドをAPIからキャンセルしたいときはどうしましょう?API一覧にキャンセルとかストップといった類のメソッドはありません...*1
答えはビルドに対するUpdateを行います。
private async Task CancelBuild(string project, string buildDefinitionName) { var definitions = await build.GetDefinitionsAsync(project: project); var target = definitions.FirstOrDefault(d => d.Name.StartsWith(buildDefinitionName, StringComparison.InvariantCultureIgnoreCase)); if (target == null) { throw new ArgumentException("{buildDefinitionName} という名前のビルド定義はありません", nameof(buildDefinitionName)); } //そのビルド定義名で実行されたビルド一覧を取得 var builds = await build.GetBuildsAsync(project, new[] {target.Id}); //完了済みもしくはキャンセル中のもの「以外」を取得 foreach (var b in builds.Where(b => !(b.Status == BuildStatus.Completed || b.Status == BuildStatus.Cancelling))) { b.Status = BuildStatus.Cancelling; await build.UpdateBuildAsync(b, b.Id); } }
どうにもAPIの対称性が悪い気がしますが、まあこんなもんなんでしょう...
*1:Deleteはあるのですが、これは完了したビルドを文字通り削除するのでキャンセルとは別物のようです