繁体   English   中英

Azure DevOps 将 NuGet 包升级到发布视图

[英]Azure DevOps Promote NuGet packages to Release view

作为 Azure DevOps 管道的一部分,我想将我们自己的 NuGet 提要中的包推广到“发布”视图,作为发布版本的一部分。

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

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

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

The REST API is described here: https://docs.microsoft.com/en-us/rest/api/azure/devops/artifactspackagetypes/nuget/update%20package%20versions?view=azure-devops-rest-6.0 , but如果有为此目的的库,我会讨厌自己实现这些类。

By reference to this doc: Azure DevOps Services .NET SDK API Reference , searching for any managed APIs by typing in the box, but we don't find such library which implements this Rest API: NuGet - Update Package Versions .

您可以在 GitHub 上的 MicrosoftDocs/反馈存储库中创建一个新问题以获取此反馈。

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

Nuget - 更新 Package 版本有一个缺陷 - 没有 {project} 相关的软件包。

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

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

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");
        }

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM