在 C# 中读取 AzureDevOps 管道变量
Read AzureDevOps Pipeline Variables in C#
我需要开发一个 C# .NetCore 控制台应用程序来访问我的 DevOps 帐户,select 一个版本并读取管道变量中的所有变量[
谁能给我举个例子?
不用担心!
要将管道变量应用于应用程序配置,您需要在管道中使用 File Transform 任务并将其配置为指向您的配置 JSON 文件在 目标文件
中
此任务要做的是使用您与管道关联的变量替换 JSON 配置中的值。
使用文件转换的一些注意事项:
- 它只能执行replace操作,不能add到你的配置中。因此,请务必为您要在 JSON 文件中替换的每个值设置占位符。
- 要访问 JSON 中的嵌套值,您需要在命名约定中使用句点。例如,在您的情况下,您需要将 ConnectionStrings:StorageAccountLogs 更改为 **ConnectionStrings.StorageAccountLogs" ** 以正确执行变量替换。
找到了使用 REST 从 Azure DevOps 读取变量的解决方案 API。
https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-6.1
这里我有一个从发布定义中读取变量的粗略草稿。您可以通过从 JSON 创建助手 类 来创建 .NET
助手对象。互联网上有这方面的网站。
Main() {
var pat = Environment.GetEnvironmentVariable("????");
var baseUrl = "https://dev.azure.com/{organization}";
var apiversion = "api-version=6.0";
var project = "????";
var search = "Releasename";
var actUrl = string.Format("{0}/{1}/_apis/release/definitions?searchText={2}&{3}",baseUrl,project,search,apiversion);
var json = await GetJsonFromUrlPAT(actUrl, pat);
cReleases varReleases = JsonConvert.DeserializeObject<cReleases>(json);
int ReleaseId=0;
if (varReleases.count == 1)
{
ReleaseId = varReleases.values[0].id;
actUrl = string.Format("{0}/{1}/_apis/release/definitions/{2}?{3}",baseUrl,project,ReleaseId,apiversion);
var json2 = await GetJsonFromUrlPAT(actUrl, pat);
cReleasedefinition varReleaseDef = JsonConvert.DeserializeObject<cReleasedefinition>(json2);
string jsonstring = JsonConvert.SerializeObject(varReleaseDef);
foreach (KeyValuePair<String,JToken> element in varReleaseDef.variables)
{
string varname = element.Key;
string varvalue = ((JObject)(element.Value)).GetValue("value").ToString();
}
foreach (var element in varReleaseDef.environments)
{
string environmentname = element.name;
foreach (KeyValuePair<String, JToken> item in element.variables)
{
string varname = item.Key;
string varvalue = ((JObject)(item.Value)).GetValue("value").ToString();
}
}
}
}
我需要开发一个 C# .NetCore 控制台应用程序来访问我的 DevOps 帐户,select 一个版本并读取管道变量中的所有变量[
谁能给我举个例子?
不用担心!
要将管道变量应用于应用程序配置,您需要在管道中使用 File Transform 任务并将其配置为指向您的配置 JSON 文件在 目标文件
中此任务要做的是使用您与管道关联的变量替换 JSON 配置中的值。
使用文件转换的一些注意事项:
- 它只能执行replace操作,不能add到你的配置中。因此,请务必为您要在 JSON 文件中替换的每个值设置占位符。
- 要访问 JSON 中的嵌套值,您需要在命名约定中使用句点。例如,在您的情况下,您需要将 ConnectionStrings:StorageAccountLogs 更改为 **ConnectionStrings.StorageAccountLogs" ** 以正确执行变量替换。
找到了使用 REST 从 Azure DevOps 读取变量的解决方案 API。
https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-6.1
这里我有一个从发布定义中读取变量的粗略草稿。您可以通过从 JSON 创建助手 类 来创建 .NET
助手对象。互联网上有这方面的网站。
Main() {
var pat = Environment.GetEnvironmentVariable("????");
var baseUrl = "https://dev.azure.com/{organization}";
var apiversion = "api-version=6.0";
var project = "????";
var search = "Releasename";
var actUrl = string.Format("{0}/{1}/_apis/release/definitions?searchText={2}&{3}",baseUrl,project,search,apiversion);
var json = await GetJsonFromUrlPAT(actUrl, pat);
cReleases varReleases = JsonConvert.DeserializeObject<cReleases>(json);
int ReleaseId=0;
if (varReleases.count == 1)
{
ReleaseId = varReleases.values[0].id;
actUrl = string.Format("{0}/{1}/_apis/release/definitions/{2}?{3}",baseUrl,project,ReleaseId,apiversion);
var json2 = await GetJsonFromUrlPAT(actUrl, pat);
cReleasedefinition varReleaseDef = JsonConvert.DeserializeObject<cReleasedefinition>(json2);
string jsonstring = JsonConvert.SerializeObject(varReleaseDef);
foreach (KeyValuePair<String,JToken> element in varReleaseDef.variables)
{
string varname = element.Key;
string varvalue = ((JObject)(element.Value)).GetValue("value").ToString();
}
foreach (var element in varReleaseDef.environments)
{
string environmentname = element.name;
foreach (KeyValuePair<String, JToken> item in element.variables)
{
string varname = item.Key;
string varvalue = ((JObject)(item.Value)).GetValue("value").ToString();
}
}
}
}