Azure DevOps 将 NuGet 包提升到发布视图
Azure DevOps Promote NuGet packages to Release view
作为 Azure DevOps 管道的一部分,我想将我们自己的 NuGet 源中的包提升到 'Release' 作为发布构建的一部分查看。
我有一个遍历所有 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 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。
您可以在 MicrosoftDocs/feedback repository on GitHub 中为此反馈创建一个新问题。
现在我们建议您直接使用这个 Rest API 来实现它。
Nuget - Update Package Versions 有一个缺陷 - 没有 {project} 包相关。
通过添加 Microsoft.VisualStudio.Services.Packaging.Client Version 16.179.0-preview 我们得到 classes,只要我们正在构建 .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");
}
}
}
作为 Azure DevOps 管道的一部分,我想将我们自己的 NuGet 源中的包提升到 'Release' 作为发布构建的一部分查看。
我有一个遍历所有 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 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。
您可以在 MicrosoftDocs/feedback repository on GitHub 中为此反馈创建一个新问题。
现在我们建议您直接使用这个 Rest API 来实现它。
Nuget - Update Package Versions 有一个缺陷 - 没有 {project} 包相关。
通过添加 Microsoft.VisualStudio.Services.Packaging.Client Version 16.179.0-preview 我们得到 classes,只要我们正在构建 .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");
}
}
}