如何定义发布环境执行Azure DevOps自动化TestPlan?C#代码报错求助
解决Azure DevOps TestRun创建时的"Both release id and release environment id must be specified"异常
问题原因
当将测试运行关联到Azure DevOps发布(Release)时,仅提供releaseUri无法让系统定位到具体的发布环境,必须同时指定发布ID(releaseId)和发布环境ID(releaseEnvironmentId)。
修复步骤
- 创建Release后,从返回的
Release对象中提取目标环境的ID(新创建的Release通常会自动部署第一个环境,可从Environments集合中获取)。 - 在
RunCreateModel中补充releaseId和releaseEnvironmentId参数,替代仅传递releaseUri的方式。
修改后的完整代码
string organizationName = "..."; string projectName = "..."; int planId = ...; string definitionName = "..."; int definitionId = ...; string releaseName = "..."; Uri organizationUrl = await VssConnectionHelper.GetOrganizationUrlAsync(organizationName); VssConnection connection = new VssConnection(organizationUrl, new VssClientCredentials()); BuildHttpClient buildClnt = connection.GetClient<BuildHttpClient>(); Build build = await buildClnt.GetLatestBuildAsync(projectName, definitionName); Microsoft.TeamFoundation.TestManagement.WebApi.ShallowReference testPlanRef = new Microsoft.TeamFoundation.TestManagement.WebApi.ShallowReference(planId.ToString()); int[] pointIds = new int[] { 1 }; ReleaseHttpClient releaseClnt = connection.GetClient<ReleaseHttpClient>(); ReleaseStartMetadata releaseStartMetadata = new ReleaseStartMetadata() { DefinitionId = definitionId }; Release release = await releaseClnt.CreateReleaseAsync(releaseStartMetadata, projectName); // 获取发布环境ID(这里取第一个环境,可根据实际需求调整) int releaseEnvironmentId = release.Environments.First().Id; RunCreateModel testRunModel = new RunCreateModel( name : releaseName, pointIds : pointIds, plan : testPlanRef, buildId : build.Id, isAutomated : true, releaseId : release.Id, // 添加发布ID releaseEnvironmentId : releaseEnvironmentId // 添加发布环境ID ); TestManagementHttpClient testMngmnt = connection.GetClient<TestManagementHttpClient>(); TestRun testRun = await testMngmnt.CreateTestRunAsync(testRunModel, projectName);
关键说明
- 若存在多个发布环境,可根据环境名称精准定位目标环境,示例代码如下:
var targetEnv = release.Environments.First(env => env.Name == "生产环境"); int releaseEnvironmentId = targetEnv.Id; - 无需再传递
releaseUri,releaseId和releaseEnvironmentId已足够让系统关联到对应的发布资源。
内容的提问来源于stack exchange,提问作者alghe
相关产品推荐
相关产品推荐

