来自代码的队列 Azure DevOps YAML 管道不接受运行时参数

2024-04-03

YAML 管道如下所示

parameters:
  - name: parameter1
    type: string
steps:
task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      # Write your PowerShell commands here.
      Write-Host ${{ parameters.parameter1 }}


队列构建的 C# 代码就像

var build = new Build()
            {
                Definition = definition,
                Project = project

            };
var dict = new Dictionary<string, string> { { "parameter1", "parametervalue" } };
build.Parameters = JsonSerializer.Serialize(dict);
buildClient.QueueBuildAsync(build).Wait();

我得到例外由于存在验证错误或警告,无法对构建进行排队。必须提供“parameter1”参数的值。任何解决此问题的想法都会有所帮助。


我成功地对一些客户端代码进行了逆向工程,这可能会对其他人有所帮助。它可能尚未完全投入生产,但请随意改进:

public class PipelineHttpClient : VssHttpClientBase
{
    public PipelineHttpClient(Uri baseUrl, VssCredentials credentials) 
        : base(baseUrl, credentials)
    {
    }

    public PipelineHttpClient(Uri baseUrl, VssCredentials credentials, VssHttpRequestSettings settings) 
        : base(baseUrl, credentials, settings)
    {
    }

    public PipelineHttpClient(Uri baseUrl, VssCredentials credentials, params DelegatingHandler[] handlers) 
        : base(baseUrl, credentials, handlers)
    {
    }

    public PipelineHttpClient(Uri baseUrl, VssCredentials credentials, VssHttpRequestSettings settings, params DelegatingHandler[] handlers) 
        : base(baseUrl, credentials, settings, handlers)
    {
    }

    public PipelineHttpClient(Uri baseUrl, HttpMessageHandler pipeline, bool disposeHandler) 
        : base(baseUrl, pipeline, disposeHandler)
    {
        
    }

    public async Task<PipelineRun> RunPipelineAsync(Guid project, int pipelineId, object parameters, string refName = "refs/heads/master")
    {
        var method = HttpMethod.Post;
        var locationId = Guid.Parse("7859261e-d2e9-4a68-b820-a5d84cc5bb3d");
        object routeValues = new
        {
            project,
            pipelineId,
            //pipelineVersion = ""
        };
        var version = new ApiResourceVersion("6.0");
        
        // ensure that the refName is prefixed correctly.
        refName = refName.StartsWith("refs/heads/", StringComparison.InvariantCultureIgnoreCase) 
            ? refName 
            : $"refs/heads/{refName}";

        var content = (HttpContent) new ObjectContent<object>(new
            {
                StagesToSkip = new object[0],
                TemplateParameters = parameters,
                Variables = new object(),
                Resources = new
                {
                    Repositories = new
                    {
                        Self = new
                        {
                            RefName = refName
                        }
                    }
                }
            },
            new VssJsonMediaTypeFormatter(true));
        var queryParameters = new Dictionary<string, string>();
        return await SendAsync<PipelineRun>(method, locationId, routeValues, version, content, queryParameters, cancellationToken: CancellationToken.None);
    }
}

public class Pipeline
{
    [JsonProperty("url")]
    public string Url { get; set; }

    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("revision")]
    public int Revision { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("folder")]
    public string Folder { get; set; }
}

public class Repository
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("type")]
    public string Type { get; set; }
}

public class Self
{
    [JsonProperty("repository")]
    public Repository Repository { get; set; }

    [JsonProperty("refName")]
    public string RefName { get; set; }

    [JsonProperty("version")]
    public string Version { get; set; }
}

public class Repositories
{
    [JsonProperty("self")]
    public Self Self { get; set; }
}

public class Resources
{
    [JsonProperty("repositories")]
    public Repositories Repositories { get; set; }
}

public class PipelineRun
{
    [JsonProperty("pipeline")]
    public Pipeline Pipeline { get; set; }

    [JsonProperty("state")]
    public string State { get; set; }

    [JsonProperty("createdDate")]
    public DateTime CreatedDate { get; set; }

    [JsonProperty("url")]
    public string Url { get; set; }

    [JsonProperty("resources")]
    public Resources Resources { get; set; }

    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

Usage:

PipelineHttpClient client = new PipelineHttpClient(...);
var project = Guid.Parse("TODO");
var pipelineId = 1234;
// pipeline parameters:
var parameters = new {meaningOfLife = 42};
var result = await client.RunPipelineAsync(project, pipelineId, parameters, "refs/heads/feature/my-branch");
if (result.State == "inProgress")
{
    // TODO the pipeline is running!
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自代码的队列 Azure DevOps YAML 管道不接受运行时参数 的相关文章

随机推荐

  • 目前Mono虚拟机的性能如何?

    网络上充斥着不同语言 编译器 虚拟机的各种性能测试 然而 几乎没有任何一个使用真实场景来测试性能 此外 在 Google 上搜索此类基准通常只会产生几年前的基准 因为这些基准有最多的时间来收集它们的链接 你们中有人真正了解不同虚拟机的当前性
  • 使用 antd 在组件中创建子菜单失败

    我正在使用 antd 3 5 4 我有一个包含用户管理项目的菜单 未登录时 菜单有一个带有登录页面链接的菜单项 登录后 菜单有一个子菜单 其中包含多个链接 包括注销 我只是对连接的用户进行简单的测试以显示链接或子菜单 当所有内容都在同一个文
  • 方案/球拍:画布操作

    1 正如标题所述 当我调整窗口大小时 我绘制的对象消失 但矩形保持原样 2 原点从左上角开始 但我希望它在左下角 3 除了绘图库之外 我找不到任何缩放功能 所以如果我希望实现这样的功能 一个选项是通过绘制更大的对象并刷新画布来 缩放 def
  • 使用 FileUpload 过滤文件扩展名

    我正在编写一个 ASP NET Web 应用程序 其中涉及使用FileUpload控制 此刻 这个特殊的FileUpload控件仅需要 zip 或 gz 文件类型 如果上传的文件类型不正确 则会向用户显示错误消息 该功能已经实现 我想要做的
  • Windows Phone 8.1 中的信标 - 没有可能性吗?

    首先 是的 我已经阅读了所有其他类似的问题 其次 我正在开发应用程序 WP 8 1 WinRT 它必须使用信标 我读了很多相关内容 我知道 如果不先配对 通常无法与 BLE 设备连接 但希望最后会破灭 所以我想问一下我有什么可能性 可以在代
  • 一次上传两个文件

    我正在尝试使用 codeigniters 上传类一次上传两个文件 两个文件字段 尽管提供了字段名称 codeigniter 仍会在第二个字段上产生错误 这是 codeigniter php 或 html 的限制 还是我只是错误地使用了该类
  • $concat mongodb 中的两个字段

    我有这两个集合 employees id NumberInt 0 name Max surname Power and loggableUser id NumberInt 0 employee NumberInt 1 现在我必须在以下查询中
  • 如何以递归方式将 React 组件渲染到自身中

    我有一个组件 即列表组件 列表组件可以渲染项目 通过组件ListItem 通过下面的内容可以轻松实现 import React from react import ListItem from list item list item clas
  • 如何使用 FastAPI 防止表单输入时页面重新加载

    我有一个使用 FastAPI 的简单程序 它将浮点值乘以 2 并将其显示在 HTML 中 该值通过 HTML 表单输入 我想知道如何获得动态显示的值 而无需在按 Enter 或按提交按钮时重新加载页面 以下是脚本 main py 和 dou
  • 在 C# 中用点和小数格式化数字[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要先 点 然后逗号 例如 1234567 这是一个数字或金钱的示例 我想要像 1 234 567 00 谁能给我答案 如果执行代码的计算
  • Gcc 卸载编译选项

    我正在尝试使用 Ubuntu 18 04 上的 gcc 10 CUDA 11 和此 CMakeLists txt 文件 或 OpenMP 版本 构建最简单的具有 GPU 卸载功能的 OpenMP 或 OpenACC C 程序 cmake m
  • 下载的php总是损坏

    我有一个用 PHP 编写的下载脚本 我的视图文件脚本链接到 ids 然后选择与该 ID 匹配的所有数据 然后使用该数据下载照片 我的照片在文件夹中重要吗 它被移动到一个文件夹 然后该目录被上传到MYSQL数据库 目前的代码现在允许一些文件完
  • Python3,与列表重新匹配

    我读到了这个 https stackoverflow com a 17090205 6426449 https stackoverflow com a 17090205 6426449 我制作了一个不能在 django 中的用户名上使用的列
  • 在 WSL (Ubuntu) 中安装适用于 python3 的 venv

    我正在尝试配置venv在带有 Ubuntu 的 Linux 的 Windows 子系统上 我尝试过的 1 安装venv通过pip pip3 准确地说 pip3 install venv 我收到以下错误 ERROR Could not fin
  • 我应该如何在 PHP 中实现延迟会话创建?

    默认情况下 PHP 的会话处理机制会设置会话 cookie 标头并存储会话 即使会话中没有数据也是如此 如果会话中没有设置数据 那么我不想要Set Cookie在响应中发送到客户端的标头 我不希望在服务器上存储空会话记录 如果数据添加到 S
  • 表达式 > 作为属性

    我正在尝试重构通用存储库的一些代码 该存储库传入一个过滤器对象 该过滤器对象将过滤数据以及页面 排序等 各传承Filter 例如 CustomerFilter 可以选择定义自己的表达式过滤器 该过滤器将由存储库中的基类应用 因此客户过滤器将
  • 如何在 Hibernate 中进行基于自定义查询的集合映射?

    我有一个对象被映射为一组对象 非常简单 然而 我真正想做的是为该映射设置一些标准 这是当前的映射
  • 尝试在空对象引用上调用虚拟方法“int java.lang.String.length()”[重复]

    这个问题在这里已经有答案了 所以我有带有选项卡的 Android 应用程序RecyclerView 当我运行我的应用程序时 它崩溃了 logcat java lang NullPointerException Attempt to invo
  • 将网站部署到 Azure 和传统 IIS

    我目前使用旧版 ASP NET Web 应用程序 未来的要求之一是它可以部署到 Windows Azure 我想知道管理 Azure 和传统 IIS Web 服务器的部署有多困难 Azure 似乎需要 Web 应用程序项目的特定自定义版本
  • 来自代码的队列 Azure DevOps YAML 管道不接受运行时参数

    YAML 管道如下所示 parameters name parameter1 type string steps task PowerShell 2 inputs targetType inline script Write your Po