如何使用Azure DevOps REST API覆盖列表变量?

Elliptica

如果我想使用带有覆盖变量的AzureDevops来排队构建,我必须传递一个参数字符串:

{   "definition" : { "id" : [BUILD_ID] },
    "parameters" : str(variables_to_overwrite) 
}

其中variables_to_overwrite是像这样的字典:

variables_to_overwrite = {
       "list_1" : str( ['A', 'B', 'C'] )
       "list_2" : str( ['D', 'E'] )
    }

如果我不将这些列表转换为字符串,则构建不会排队。我在排队构建之前打印出参数,它们看起来是正确的:

{'definition': {'id': [BUILD_ID}, 
 'parameters': '{\'list_1\': "\'[\'A\', \'B\', \'C\']\'", \'list_2\': "\'[\'D\', \'E\']\'}'

但是当我打印出所看到的参数时,它会打印:

'--list_1', "'['A", "B',", "'C"]'", '--list_2', "'['D", "E']'"

如您所见,单引号和双引号变得非常混杂,这意味着解析arg的程序不会将其视为两个arg,而是七个!

我尝试用单引号强制替换所有双引号,但是当我这样做时,构建将不会排队。我什至尝试像这样重写它:

{'definition': {'id': [BUILD_ID}, 
 'parameters': '{\'list_1\': \'[\'A\', \'B\', \'C\']\', \'list_2\': \'[\'D\', \'E\']\'}'

但是,当我得到构建结果时,它所做的是添加双引号和单引号混合的相同操作(与前述完全相同)。

如何防止DevOps破坏作为参数传递的列表和字典之类的引用对?我已经尝试过我能想到的所有排列,包括手动将其包装在引号中,替换引号,使用json.dumps等。没有任何效果。使构建进入队列的唯一方法是传递一个字符串,无论它获得了什么引号输入,无论是否转义,devOps都会通过并用single-quote, double-quote模式替换所有引号

Elliptica

经过长时间的反复试验,我确定Azure DevOps要求用于覆盖的列表具有以下格式:

'[]',
'"[\'A\', \'B\']"'

也就是说,single-quote, double-quote, bracket, escaped single quotes inside the list, bracket, double-quote, single-quote引用样式不能互换,并且必须使用转义符。任何偏差都会导致问题中描述的问题。

在Python中使用,这几乎是不可能的str()但是,可以使用来完成repr()

定义时variables_to_overwrite,请勿将任何列表都强制转换为字符串(如问题所示)。而是将它们保留为列表,然后执行以下替换:

if variables_to_overwrite:
    for key in variables_to_overwrite:
        value = variables_to_overwrite[key]
        if type(value) == list:
            variables_to_overwrite[key] = '"' + repr(value) + '"'   # THIS FORMAT IS CRUCIAL

最后,定义您的参数:

params = {
    "definition": {
        "id": build_id
    },
    "parameters" : str(variables_to_overwrite)   # THIS IS THE ONLY PLACE TO USE STR()
}

这会将列表转换为Azure DevOps所需的奇怪字符串格式,并防止DevOps破坏引号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Azure DevOps REST API

使用Azure DevOps REST Api如何获取分支的提交哈希?

如何以角度使用 Azure devops REST API

如何使用Bearer令牌从Azure DevOps调用REST API

如何使用Azure devops Rest Api获取最新标签?

如何使用 REST API 在 Azure DevOps 中禁用分支策略?

如何使用 Rest API 管理 Azure DevOps 组权限

如何使用 REST API 在 azure devops 中创建环境

使用 Azure DevOps REST Api 如何获取默认分支?

如何使用 Azure Devops Services Rest API 在 Azure Devops 中更新测试用例的“区域路径”

Azure DevOps使用REST API调用GetItem

Azure Devops REST API 删除

Azure DevOps REST api-使用变量运行管道

使用REST API设置Azure devops Release管道变量

Azure DevOps:如何使用REST API更新发布范围的变量

如何使用 rest api 在 Azure DevOps 中获取发布管道名称列表

无法从Azure DevOps Services REST API获取Azure DevOps代码覆盖率信息

启动构建并通过Azure DevOps Rest API传递变量

Azure DevOps Rest API获取发布定义不包含变量

Azure DevOps通过Rest Api访问控制列表设置权限

如何使用Azure DevOps Rest API使用Powershell获取版本状态(成功,失败)

REST API的Azure Devops Maven依赖

Azure Devops REST API删除版本

上传附件-Azure DevOps(板)-REST API

Azure DevOps 如何通过 REST API 编辑 Wiki 页面

Azure Devops:如何通过 Rest API 检索发布工件的版本?

如何从Azure DevOps扩展中调用Wiki REST Api?

如何从Azure DevOps Services REST API获取可用的区域路径?

如何访问Azure DevOps从REST API部署注释