Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 在Release Gate或ServerGate任务上解析Json成功条件_Azure Devops_Azure Pipelines Release Pipeline_Azure Pipelines Build Task_Continuous Delivery - Fatal编程技术网

Azure devops 在Release Gate或ServerGate任务上解析Json成功条件

Azure devops 在Release Gate或ServerGate任务上解析Json成功条件,azure-devops,azure-pipelines-release-pipeline,azure-pipelines-build-task,continuous-delivery,Azure Devops,Azure Pipelines Release Pipeline,Azure Pipelines Build Task,Continuous Delivery,我试图拼凑一个发布门/服务器门构建任务,调用一个Web服务,获取Json,然后决定是否继续 服务返回的Json如下所示: { "publisher": { "publisherId": "c68591c6-8fbd-413b-b7fb-b921737f4f9f", "publisherName": "jessehouwing", "displayName": "Jesse Houwing", "flags": "verifi

我试图拼凑一个发布门/服务器门构建任务,调用一个Web服务,获取Json,然后决定是否继续

服务返回的Json如下所示:

{
    "publisher": {
        "publisherId": "c68591c6-8fbd-413b-b7fb-b921737f4f9f",
        "publisherName": "jessehouwing",
        "displayName": "Jesse Houwing",
        "flags": "verified"
    },
    "extensionId": "252ad2b4-a2c5-43fc-bba5-17e631896091",
    "extensionName": "vsts-snyk",
    "displayName": "Snyk Task",
    "flags": "validated, public",
    "lastUpdated": "2018-03-16T18:58:36.327Z",
    "publishedDate": "2016-11-16T21:35:28.387Z",
    "releaseDate": "2016-11-16T21:35:28.387Z",
    "shortDescription": "Snyk continuously finds and fixes vulnerabilities in your dependencies.",
    "versions": [
        {
            "version": "1.1.12",
            "flags": "validated",
            "lastUpdated": "2018-03-16T18:58:53.133Z"
        },
        {
            "version": "1.1.11",
            "flags": "validated",
            "lastUpdated": "2018-02-18T13:53:47.83Z"
        }
    ],
    "deploymentType": 0
}
我正在基于task.json中的HttpHandler执行处理程序调用服务:

  "execution": {
    "HttpRequest": {
      "Execute": {
        "EndpointId": "$(connectedServiceName)",
        "EndpointUrl": "$(endpoint.url)_apis/gallery/publishers/$(publisherId)/extensions/$(extensionId)$(extensionTag)?flags=1",
        "Method": "GET",
        "Body": "",
        "Headers": "{\"Content-Type\":\"application/json\"}",
        "WaitForCompletion": "false",
        "Expression": "eq(jsonpath('$.versions[?(@.version==$(extensionVersion))].flags'), 'validated')"
      }
    }
  }
关于表达式语法和支持的jsonpath语法的文档很少。我从以下网站中窃取了大部分示例:

我尝试了许多不同的表达方式,但迄今为止没有一种有效:

eq(jsonpath('$.versions[?(@.version==$(extensionVersion))].flags'), 'validated')

eq(count(jsonpath('$.versions[?(@.version==$(extensionVersion)), ?(@.flags==validated)]')), 1)

eq(count(jsonpath('$.versions[?(@.version==$(extensionVersion)) && ?(@.flags==validated)]')), 1)
我尝试了许多不同的方法,比如双重转义
或混合

不幸的是,除了表达式失败之外,服务器没有给我很多信息,因此毫无用处

执行日志如下所示:

2018-04-01T13:34:51.2938460Z GET https://marketplace.visualstudio.com/_apis/gallery/publishers/jessehouwing/extensions/vsts-snyk?flags=1
                Response Code: OK
                Response: {"publisher":{"publisherId":"c68591c6-8fbd-413b-b7fb-b921737f4f9f","publisherName":"jessehouwing","displayName":"Jesse Houwing","flags":"verified"},"extensionId":"252ad2b4-a2c5-43fc-bba5-17e631896091","extensionName":"vsts-snyk","displayName":"Snyk Task","flags":"validated, public","lastUpdated":"2018-03-16T18:58:36.327Z","publishedDate":"2016-11-16T21:35:28.387Z","releaseDate":"2016-11-16T21:35:28.387Z","shortDescription":"Snyk continuously finds and fixes vulnerabilities in your dependencies.","versions":[{"version":"1.1.12","flags":"validated","lastUpdated":"2018-03-16T18:58:53.133Z"},{"version":"1.1.11","flags":"validated","lastUpdated":"2018-02-18T13:53:47.83Z"},{"version":"1.1.9","flags":"validated","lastUpdated":"2017-03-14T09:40:40.75Z"},{"version":"1.1.8","flags":"validated","lastUpdated":"2017-03-13T19:50:57.603Z"},{"version":"1.1.7","flags":"validated","lastUpdated":"2017-03-13T19:45:29.647Z"},{"version":"1.1.6","flags":"validated","lastUpdated":"2017-02-21T10:58:40.617Z"},{"version":"1.1.3","flags":"validated","lastUpdated":"2017-02-21T10:46:02.86Z"},{"version":"1.1.2","flags":"validated","lastUpdated":"2017-02-21T10:42:05.503Z"},{"version":"1.0.21","flags":"validated","lastUpdated":"2017-01-12T20:54:40.587Z"},{"version":"1.0.20","flags":"validated","lastUpdated":"2017-01-12T20:19:58.767Z"},{"version":"1.0.19","flags":"validated","lastUpdated":"2017-01-12T20:14:43.677Z"},{"version":"1.0.17","flags":"validated","lastUpdated":"2017-01-04T18:49:51.233Z"},{"version":"1.0.16","flags":"validated","lastUpdated":"2017-01-04T10:27:29.48Z"},{"version":"1.0.5","flags":"validated","lastUpdated":"2016-12-15T12:00:16.027Z"},{"version":"1.0.4","flags":"validated","lastUpdated":"2016-12-02T20:03:02.753Z"},{"version":"1.0.3","flags":"validated","lastUpdated":"2016-12-01T18:56:42.703Z"},{"version":"1.0.1","flags":"validated","lastUpdated":"2016-11-29T20:25:24.887Z"},{"version":"0.9.17","flags":"validated","lastUpdated":"2016-11-29T18:41:15.72Z"},{"version":"0.9.16","flags":"validated","lastUpdated":"2016-11-29T16:07:54.787Z"},{"version":"0.9.13","flags":"validated","lastUpdated":"2016-11-29T15:22:14.327Z"},{"version":"0.9.12","flags":"validated","lastUpdated":"2016-11-26T13:38:01.453Z"},{"version":"0.9.9","flags":"validated","lastUpdated":"2016-11-21T23:03:30.797Z"},{"version":"0.9.7","flags":"validated","lastUpdated":"2016-11-20T13:20:51.503Z"},{"version":"0.9.3","flags":"validated","lastUpdated":"2016-11-19T13:38:40.32Z"},{"version":"0.9.2","flags":"validated","lastUpdated":"2016-11-16T21:35:36.59Z"}],"deploymentType":0}
                Evaluation of expression 'eq(count(jsonpath('$.versions[?(@.version==''1.1.12''),?(@.flags==''validated'')]')), 1)' failed.
表达式中的显式causign errors会给我一条错误消息,因此表达式至少看起来解析得很好

为了在不必首先创建整个任务的情况下进行测试,您可以创建一个调用REST API发布门,如下所示:

并使用以下通用端点:

  • 网址:
  • 密码:PAT(所有帐户)

我必须下定决心构建自己的表达式测试工具(稍后将在我的博客上发布),以便快速迭代不同的表达式并获得更好的错误消息

以下表达方式有效:

eq(count(jsonpath('$.versions[?(@.version==''1.1.12'' && @.flags==''validated'')]')), 1)
还可以从表达式中提取值,然后使用以下方法进行比较:

eq(jsonpath('$.versions[?(@.version==''1.1.12'')].flags')[0], 'validated')
注意标记在jsonpath结果上的
[0]

单引号
需要双转义
,组合表达式的方法在
?(a和&b)
块中

同时,我发现表达式使用NewtonSoft.Json库来解析表达式,因此它们的表达式语法就是要使用的语法。我尝试了两个在线jsonpath测试工具,但这些工具依赖的Javascript库没有NewtonSoft实现那么严格

偷窥本地验证工具:

您可以在此处找到测试工具。由于对TFS服务器对象模型的依赖性,它仅在安装了TFS 2018 update 2或更高版本(无需配置或在您的系统上运行)时起作用:


它似乎无法比较字符串值,要比较数字,您不需要指定引号。此示例运行良好()
{“Items”:[{“name”:“item1”,“price”:100},{“name”:“item2”,“price”:40},{“name”:“item3”,“price”:70}
表达式是
eq(count)(jsonpath:'Items[?(@.price)]