【发布时间】:2018-03-09 22:39:49
【问题描述】:
使用 TFS2018 手动对构建进行排队时,搁置集名称并非在所有情况下都显示源分支名称。有时填写有时未填写。因为我正在为源分支选择构建变量 $(Build.SourceBranch) $(Build.SourceBranchName)
如果 Shelveset 名称为空,它们将为空。
是否可以在创建构建定义时使用 API 将搁置集名称默认设置为源分支?
我可以使用另一个构建变量来获取当前构建的解决方案的源路径吗?
更新所以我正在尝试使用构建 api 更新源分支。但是,当我被调用时,我得到一个
{StatusCode:405,ReasonPhrase:'方法不允许',版本:1.1,内容:System.Net.Http.StreamContent,标头: { Pragma:无缓存 X-TFS-ProcessId: 活动编号: X-TFS-会话: X-VSS-E2EID: X 框架选项:SAMEORIGIN X-VSS-UserData: :用户 持久认证:真 Lfs 验证:NTLM X-Content-Type-Options: nosniff 缓存控制:无缓存 日期:格林威治标准时间 2018 年 3 月 9 日星期五 14:37:16 P3P: CP="CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT" 服务器:Microsoft-IIS/10.0 X-AspNet-版本:4.0.30319 X-Powered-By: ASP.NET 内容长度:93 允许:获取 内容类型:应用程序/json;字符集=utf-8 过期:-1 }}
以下代码....
internal void UpdateSourceBranches(List<BuildDefinition> defs)
{
using (var handler = new HttpClientHandler { Credentials = new NetworkCredential(tfsUser, tfsPass) })
using (var client = new HttpClient(handler))
{
try
{
client.BaseAddress = new Uri(tfsServer);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
foreach (var def in defs)
{
var buildId = def.Id;
var sourceBranch = $"$/{def.Repository.Name}/{def.Project.Name}";
var parameters = new Dictionary<string, string> { { "BuildConfiguration", "release" },
{ "BuildPlatform", "x86|x64|ARM" },
{ "system.debug", "true" }
};
var jsonParams = JsonConvert.SerializeObject(parameters);
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("id", buildId.ToString()),
new KeyValuePair<string, string>("sourceBranch", sourceBranch),
new KeyValuePair<string, string>("parameters", jsonParams)
});
var response = client.PostAsync($"DefaultCollection/{def.Repository.Name}/_apis/build/builds?api-version=3.0-preview.1", content);
var s = response.Result;
}
}
catch (Exception ex)
{
}
}
}
【问题讨论】:
-
嗨@CeceDong-MSFT 感谢您的回答。看来我遇到的问题与我创建构建定义的方式有关。稍后我会更好地查看它。
-
这部分你应该使用
Queue a buildapi 而不是create a build definitionapi。 -
如果您想在队列对话框中看到搁置集名称,您可以在构建定义的
Get sources中映射确切的源分支。
标签: tfs azure-devops tfvc