如何通过API触发Azure DevOps发布管道中的手动部署
解决方案:通过API触发手动发布环境的部署
当发布定义设置为“仅手动”时,仅激活发布并不会自动触发环境部署,需要单独调用API来发起环境的部署操作。你可以使用Azure DevOps .NET SDK中的DeployReleaseEnvironmentAsync方法来实现这一点。
修改后的代码
在你现有代码的基础上,添加触发环境部署的关键逻辑:
public async Task QueueRelease(string releaseDefinitionName) { string teamProjectName = GetTeamProjectName(); using (var connection = Authenticate()) using (var releaseClient = connection.GetClient<ReleaseHttpClient2>()) using (var buildClient = connection.GetClient<BuildHttpClient>()) { var releaseDefinition = (await releaseClient.GetReleaseDefinitionsAsync2(teamProjectName, releaseDefinitionName, ReleaseDefinitionExpands.Artifacts)).SingleOrDefault(); var primaryArtifact = releaseDefinition.Artifacts.Where(a => a.IsPrimary).SingleOrDefault(); var projectName = primaryArtifact.DefinitionReference["project"].Id; var buildDefinitionId = Convert.ToInt32(primaryArtifact.DefinitionReference["definition"].Id); // 获取对应构建定义的最新成功构建 var lastBuild = (await buildClient.GetBuildsAsync(projectName, new[] { buildDefinitionId }, statusFilter: BuildStatus.Completed)) .OrderByDescending(b => b.Id) .FirstOrDefault(); // 创建草稿发布并关联最新构建 var metadata = new ReleaseStartMetadata { DefinitionId = releaseDefinition.Id, IsDraft = true, Description = "Draft", Artifacts = new[] { new ArtifactMetadata { Alias = primaryArtifact.Alias, InstanceReference = new BuildVersion { Id = lastBuild.Id.ToString(), Name = lastBuild.BuildNumber } } } }; var release = await releaseClient.CreateReleaseAsync(metadata, teamProjectName); // 激活发布 var updateMetadata = new ReleaseUpdateMetadata { Status = ReleaseStatus.Active, Comment = "Test release" }; release = await releaseClient.UpdateReleaseResourceAsync(updateMetadata, teamProjectName, release.Id); // 触发第一个环境的部署(核心步骤) var targetEnvironment = release.Environments[0]; var deployMetadata = new ReleaseEnvironmentUpdateMetadata { Status = EnvironmentStatus.InProgress, Comment = "Trigger deployment via API" }; await releaseClient.DeployReleaseEnvironmentAsync( teamProjectName, release.Id, targetEnvironment.Id, deployMetadata); } }
关键说明
- 核心操作是调用
DeployReleaseEnvironmentAsync方法,传入项目名、发布ID、目标环境ID和更新元数据,将环境状态设为InProgress,以此模拟门户中点击“部署”的手动操作。 - 无需修改发布定义的“仅手动”触发设置,API调用完全兼容该配置。
- 如果需要部署多个环境,只需循环遍历
release.Environments集合,对每个环境执行上述部署逻辑即可。
内容的提问来源于stack exchange,提问作者ItFlyingStart
相关产品推荐
相关产品推荐

