【问题标题】:TFS2018 why is shelveset name empty?TFS2018为什么搁置名称为空?
【发布时间】: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 build api 而不是create a build definition api。
  • 如果您想在队列对话框中看到搁置集名称,您可以在构建定义的Get sources 中映射确切的源分支。

标签: tfs azure-devops tfvc


【解决方案1】:

你应该使用Queue a build api来设置SourceBranch,例如:

POST http://TFS2018:8080/tfs/DefaultCollection/{project}/_apis/build/builds?api-version=2.0

Content-Type: application/json

{
  "definition": {
    "id": 47
  },
  "sourceBranch":"$/CeceScrum/TestCaseProject",
  "parameters":"{\"BuildConfiguration\":\"release\",\"BuildPlatform\":\"any cpu\",\"system.debug\":\"false\"}"
}

如果你想选择一个shelfset来构建,那么api如下所示:

POST http://TFS2018:8080/tfs/DefaultCollection/{project}/_apis/build/builds?api-version=2.0

    Content-Type: application/json

    {
      "definition": {
        "id": 47
      },
      "sourceBranch":"ceceShelveset;domain\\username",
      "parameters":"{\"BuildConfiguration\":\"release\",\"BuildPlatform\":\"any cpu\",\"system.debug\":\"false\"}"
    }

【讨论】:

  • 嗨@CeceDong 实际上我在设置正确的api版本后得到了一个不允许的方法......
  • 你应该使用api-version=2.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
相关资源
最近更新 更多