2017-08-18 23 views
0
之后使用它

我在jenkins上遇到问题。我做一个HTTP请求,这回我一个JSON文件是这样的:Jenkins:从json文件中检索变量并在

httpRequest authentication: 'b689fe3c-117e-4076-b10d-fe16ab14742f', httpMode: 'POST', outputFile: 'merge.json', responseHandle: 'NONE', url:'http://address:port/prweb/api/v1/branches/TestB/merge' 


{ "ID": "SYSTEM-QUEUE-MERGE 50304628545400035CA951969013040610A435733ECEAE8", 
"pxObjClass": "Pega-API-CI-Branch", 
"statusValue": "OK" 
} 

我想要的ID,以在其他HTTP请求中使用:

http://address:port/prweb/api/v1/merges/{$ID} 

我试图抓住的Id是这样的: ID = $(cat merge.json | grep -o SY。* [az](所有json文件都是一样的)

我尝试在sh管道中捕获ID,但他不工作,所以我尝试如果有人有解决方案,这将是我的伟大! 我继续搜索,我会编辑,如果我suceed

编辑:我管代码:

pipeline{ 
agent any 
stages{ 
    stage ('Merge Branch') { 

     steps{ 

      httpRequest authentication: 'b689fe3c-117e-4076-b10d-fe16ab14742f', httpMode: 'POST', outputFile: 'merge.json', responseHandle: 'NONE', url: 'http://address:port/prweb/api/v1/branches/TestB/merge' 

      httpRequest authentication: 'b689fe3c-117e-4076-b10d-fe16ab14742f', httpMode: 'GET', outputFile: 'merge3.json', responseHandle: 'NONE', url: 'http://address:port/prweb/api/v1/merges/' 

     } 
    } 
} 

}

+0

_like THIS_?像什么?同时显示代码 –

+0

“对话很便宜,给我看代码” –

回答

0

是grep的不适合我的工作。我相信你可以用它来解决问题。

如果安装JQ,你可以做到以下几点:

ID="$(cat merge.json | jq -r .ID)" 

# produces SYSTEM-QUEUE-MERGE 50304628545400035CA951969013040610A435733ECEAE8 
# as expected 
echo "$ID" 
当然

即使你顺利拿到输出的壳解析,那么你仍然需要得到的结果返回到常规情况下以便使用httpRequest。一个热门的解决方案是完全避免httpRequest,只是使用curl来处理这三个请求。 :)这种方法(对你的构建使用外部脚本)可能不是直觉,由詹金斯人提倡。

如果你必须保持HTTP请求在Groovy中,这里是一个完整的管道,回答你的问题:

pipeline { 
    agent { label 'docker' } 
    stages { 
    stage('build') { 
     steps { 
     script { 
      def idFromJson = sh(script: "cat merge.json | jq -r .ID", returnStdout: true).trim() 

      # produces output: idFromJson: SYSTEM-QUEUE-MERGE 50304628545400035CA951969013040610A435733ECEAE8 
      echo "idFromJson: ${idFromJson}" 
     } 
     } 
    } 
    } 
} 
+0

我已经尝试jq,它没有工作。我有预期的系统[],但我的问题是你在说什么之后。我不知道如何在当前的情况下得到结果。 (卷曲不起作用) – Christophe

+0

如果将所有卷曲放在常规上下文之外,则根本不需要在常规上下文中。但我更新了答案,以显示如果您想要走这条路线,您可以如何将结果返回到常规环境。 – burnettk