【问题标题】:Read AzureDevOps Pipeline Variables in C#在 C# 中读取 AzureDevOps 管道变量
【发布时间】:2021-02-15 14:01:55
【问题描述】:

我需要开发一个 C# .NetCore 控制台应用程序来访问我的 DevOps 帐户,选择一个版本并读取管道变量中的所有变量[

谁能举个例子?

【问题讨论】:

  • 嗨@André Bonim 这张票有什么更新吗?如果答案可以给你一些帮助,请随时告诉我。如果答案可以解决这个问题,你可以考虑accepting one as answer
  • 为什么要这样做?如果您的应用程序需要在运行时访问配置值,更常见的方法是使用在部署时转换的配置文件,或者将配置存储在 Azure KeyVault 等配置管理服务中。
  • 同意,在应用程序中与 Azure DevOps 联系以从管道变量中提取值是不寻常的。 @Daniel Mann 是正确的,如果您希望集中存储配置并在运行时提取它,那么在这种情况下,Azure Key Vault 是正确的选择。

标签: .net-core azure-devops console-application azure-pipelines


【解决方案1】:

找到了一个解决方案,使用 REST API 从 Azure DevOps 读取变量。

https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-6.1

【讨论】:

    【解决方案2】:

    在这里,我有一个粗略的草稿,可以从发布定义中读取变量。您可以通过从 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();
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      不用担心!

      要将管道变量应用于应用程序配置,您需要在管道中使用 文件转换 任务并将其配置为指向 中的配置 JSON 文件>目标文件

      此任务要做的是使用与管道关联的变量来替换 JSON 配置中的值。

      使用文件转换的一些注意事项:

      • 它只能执行替换操作,不能添加到您的配置中。因此,请务必为您希望在 JSON 文件中替换的每个值添加占位符。
      • 要访问 JSON 中的嵌套值,您需要在命名约定中使用句点。例如,您需要将 ConnectionStrings:StorageAccountLogs 更改为 **ConnectionStrings.StorageAccountLogs" ** 以正确执行变量替换。

      【讨论】:

      • 回答了这个问题。问题是关于如何在 C# 应用程序 from Azure DevOps in 中读取变量。
      猜你喜欢
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多