Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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
Jenkins Ansible can';t在curl调用中发送json变量_Jenkins_Curl_Ansible - Fatal编程技术网

Jenkins Ansible can';t在curl调用中发送json变量

Jenkins Ansible can';t在curl调用中发送json变量,jenkins,curl,ansible,Jenkins,Curl,Ansible,我试图使用curl调用从Ansible向Jenkins作业发送一个json变量({parameter_var}})。以下是我正在使用的任务: - name: Call Jenkins Job shell: curl -H "crumb:{{ response.json.crumb }}" '{{ jenkinshost }}/job/{{ jenkinsjob }}/buildWithParameters?token={{ jenkinstoken }}' --data-urlencode

我试图使用curl调用从Ansible向Jenkins作业发送一个json变量({parameter_var}})。以下是我正在使用的任务:

- name: Call Jenkins Job
  shell: curl -H "crumb:{{ response.json.crumb }}" '{{ jenkinshost }}/job/{{ jenkinsjob }}/buildWithParameters?token={{ jenkinstoken }}' --data-urlencode json='{"parameter": [{"name":"parameter", "value":\""{{ parameter_var }}"\"}]}'
我得到的错误是:

             Syntax Error while loading YAML.\n  mapping values are not allowed in this context
Ansible表示,问题在于:

           YAML thought it was looking for the start of a\nhash/dictionary and was confused to see a second "{".
它似乎不是接受{{parameter\u var}}作为变量,而是试图将其作为{{parameter\u var}的值来读取。我尝试了几种添加或转义引号的方法,但似乎不知道Ansible/YAML在寻找什么。我只是添加了错误的引号,还是不能使用此方法发送变量

我打印了我的{{parameter_var}}。没有什么不寻常的,所以我不认为这是问题所在:

{
    "msg": {
        "msg": "All items completed",
        "changed": false,
        "results": [
            {
                "content_length": "142", 
                 ...
            } ...
}
我试图实现的目标是将Jenkins中的参数“parameter”设置为{{parameter_var}}的值


我在这里找到了将json发送给Jenkins的语法:

在您的问题中,有很多问题需要解决:

  • 当有专门为此设计的内置应答器时,您不应该向
    curl
    • 与此相关,您在curl中取消了
      --fail
      ,因此非200响应将导致
      shell:
      退出0,这几乎肯定不是您想要的
  • yaml文档中不能有
    字符后跟空格,因为yaml就是这样定义dict中的键的
  • 您不应该尝试使用jinja2模板构建JSON,而应该在
    dict
    list
    中构建结构,并将其输入以确保正确引用
但是,如果您特别坚持该语法,您可以通过一些轻度编辑来修复它:

-名称:呼叫Jenkins Job
外壳:>-
curl--fail-H“crumb:{{response.json.crumb}”
“{jenkinshost}}/job/{jenkinsjob}}/buildWithParameters?token={{jenkinstoken}}”
--数据urlencode json={{json|U数据|到| json | quote}
变量:
json_数据:
参数:
-名称:“参数”
值:“{parameter_var}}”

在您的问题中有很多问题需要解决:

  • 当有专门为此设计的内置应答器时,您不应该向
    curl
    • 与此相关,您在curl中取消了
      --fail
      ,因此非200响应将导致
      shell:
      退出0,这几乎肯定不是您想要的
  • yaml文档中不能有
    字符后跟空格,因为yaml就是这样定义dict中的键的
  • 您不应该尝试使用jinja2模板构建JSON,而应该在
    dict
    list
    中构建结构,并将其输入以确保正确引用
但是,如果您特别坚持该语法,您可以通过一些轻度编辑来修复它:

-名称:呼叫Jenkins Job
外壳:>-
curl--fail-H“crumb:{{response.json.crumb}”
“{jenkinshost}}/job/{jenkinsjob}}/buildWithParameters?token={{jenkinstoken}}”
--数据urlencode json={{json|U数据|到| json | quote}
变量:
json_数据:
参数:
-名称:“参数”
值:“{parameter_var}}”