【问题标题】:Azure DevOps Promote NuGet packages to Release viewAzure DevOps 将 NuGet 包提升到发布视图
【发布时间】:2021-04-17 13:25:20
【问题描述】:

作为 Azure DevOps 管道的一部分,我想将我们自己的 NuGet 源中的包提升到“发布”视图,作为发布构建的一部分。

我有一个应用程序,它遍历所有 project.assets.json 文件并查找解决方案中项目使用的包的名称和版本。 通过将名称与我们自己的包进行模式匹配来减少此列表。

之前我已成功使用 Microsoft.TeamFoundation.Build.WebApi 的 BuildHttpClient 来访问有关构建和构建工件的信息。

访问 Nuget 包、提要和视图的可用工具有哪些?

此处描述了 REST API:https://docs.microsoft.com/en-us/rest/api/azure/devops/artifactspackagetypes/nuget/update%20package%20versions?view=azure-devops-rest-6.0,但如果有用于此目的的库,我不想自己实现这些类。

【问题讨论】:

    标签: azure azure-devops-rest-api


    【解决方案1】:

    通过参考此文档:Azure DevOps Services .NET SDK API Reference,通过在框中键入搜索任何托管 API,但我们没有找到实现此 Rest API 的此类库:NuGet - Update Package Versions。

    您可以在MicrosoftDocs/feedback repository on GitHub 中创建一个新问题以获取此反馈。

    现在我们建议你直接使用这个 Rest API 来实现。

    【讨论】:

    【解决方案2】:

    Nuget - Update Package Versions 有一个缺陷 - 没有与包相关的 {project}。

    通过添加Microsoft.VisualStudio.Services.Packaging.Client Version 16.179.0-preview,我们可以获得类,只要我们正在构建.Net Framework 4.6.2 或更高版本(还没有网络标准)。

    基于此,我构建了以下帮助类(没有异常处理或线程以保持简单):

    using System;
    using System.Collections.Generic;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text;
    
    using Microsoft.VisualStudio.Services.NuGet.WebApi.Types;
    using Microsoft.VisualStudio.Services.Packaging.Shared.WebApi;
    
    using Newtonsoft.Json;
    
    namespace PromotePackages
    {
        public class PromotePackageBatch
        {
            private readonly string _organization;
            private readonly string _feedId;
            private readonly string _token;
    
            public PromotePackageBatch(string organization, string feedId, string token)
            {
                _organization = organization;
                _feedId = feedId;
                _token = token;
            }
    
            public void PromotePackagesToView(IDictionary<string, string> Libraries, string viewName)
            {
                var packs = new List<MinimalPackageDetails>();
                foreach (var kvp in Libraries)
                {
                    packs.Add(new MinimalPackageDetails
                    {
                        Id = kvp.Key,
                        Version = kvp.Value
                    });
                }
                using (HttpClient client = new HttpClient())
                {
                    NuGetPackagesBatchRequest req = new NuGetPackagesBatchRequest
                    {
                        Data = new BatchPromoteData
                        {
                            ViewId = viewName
                        },
                        Operation = 0,
                        Packages = packs
                    };
    
                    var httpContent = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8, "application/json");
    
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", _token))));
    
                    var response = client.PostAsync(BuildUri(), httpContent).Result;
    
                    var responseString = response.Content.ReadAsStringAsync().Result;
                }
            }
    
            private Uri BuildUri()
            {
                return new Uri($"https://pkgs.dev.azure.com/{_organization}/_apis/packaging/feeds/{_feedId}/nuget/packagesbatch?api-version=6.0-preview.1");
            }
    
        }
    }
    

    【讨论】:

    • @EdwardHan-MSFT 感谢您的帮助。我会尽快接受(限 24 小时)
    猜你喜欢
    • 2020-01-30
    • 2021-05-06
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2019-07-04
    • 2021-11-19
    相关资源
    最近更新 更多