在 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();
            }
        }
    }
}