来自命令行和 Groovy 脚本的 curl 请求

理查威

我面临一个我不明白的问题,我编写了一个简单的 groovy 脚本,当从命令行调用时,它按预期工作

#!/usr/bin/env groovy

def jsonParse(def json) {
  new groovy.json.JsonSlurperClassic().parseText(json)
}

def ticketNumbers = ["MYSTATS-2695", "MYSTATS-2694"]

 ArrayList<String> jiraLinks = new ArrayList<String>();

  for(int i =0; i < ticketNumbers.size(); i++) {
    def jira_json = "curl -o /dev/null -X GET -H Content-Type: application/json --cert-type PEM --key-type PEM -E /Users/Jenkins/.jenkins/workspace/certificates/cert.pem --key /Users/Jenkins/.jenkins/workspace/certificates/cert.pem https://jira.dev.org.co.uk:443/rest/api/2/issue/${ticketNumbers[i]}".execute().text;
    def json = jsonParse(jira_json);
    def summary = json['fields']['summary'].toString();
    jiraLinks.add("[" + ticketNumbers[i] + "](https://jira.dev.org.co.uk/browse/" + ticketNumbers[i] + ")" + " - " + summary);
  }

 println "${jiraLinks}"

所以当我这样做的时候 groovy myscript.groovy

这将打印出来

[[MYSTATS-2695 ](https://jira.dev.org.co.uk/browse/MYSTATS-2695 ) - Jenkins build pipeline should ignore draft and pre-releases, [MYSTATS-2694 ](https://jira.dev.org.co.uk/browse/MYSTATS-2694 ) - Android Jenkins pipeline should populate the comscore SDK version automatically]

所以这正如预期的那样。

然后我拥有的是一个 groovy 脚本,我将其称为 jenkins 管道构建的一部分

class Helpers {

   def jsonParse(def json) {
     new groovy.json.JsonSlurperClassic().parseText(json)
   }

  def createJiraLinks(def ticketNumbers) {

    ArrayList<String> jiraLinks = new ArrayList<String>();
    for(int i =0; i < ticketNumbers.size(); i++) {
      def jira_json = "/usr/bin/curl -o /dev/null -X GET -H Content-Type: application/json --cert-type PEM --key-type PEM -E /Users/Jenkins/.jenkins/workspace/certificates/cert.pem --key /Users/Jenkins/.jenkins/workspace/certificates/cert.pem https://jira.dev.org.co.uk:443/rest/api/2/issue/MYSTATS-2695".execute().text;
      def json = jsonParse(jira_json);
      def summary = json['fields']['summary'].toString();
    jiraLinks.add("[" + ticketNumbers[i] + "](https://jira.dev.org.co.uk/browse/" + ticketNumbers[i] + ")" + " - " + summary);
    }
    return jiraLinks;
  }

}
return new Helpers();

作为我 Jenkins 构建的一部分,我有

def groovyMethod = load("${env.WORKSPACE}/groovy_scripts/release_pipeline.groovy")
def jira = groovyMethod.createJiraLinks(ticketNumberCommits);
echo "JIRA LINKAS ARE $jira"
// $jira is always returned as empty string

我是否误解了这里的任何内容,因为我预计这会起作用?但似乎 curl 请求永远不会得到任何回报

谢谢

达吉特

groovy String.execute() 返回可能仍在运行的进程(取决于系统负载和天气))

如果您想等到进程结束,请执行以下操作:

def txt = "cmd /c dir c:\\".execute().with{
    def output = new StringWriter()
    def error = new StringWriter()
    //wait for process ended and catch stderr and stdout 
    it.waitForProcessOutput(output, error)
    //check there is no error
    assert error.toString().size()==0: "$error"
    //println it.exitValue() //we can do check with error code
    //return stdout from closure 
    return output.toString()
}

jenkins pipeline避免错误,请java.io.NotSerializableException使用以下代码:

node {
    def res = runAndWait("cmd /c dir c:\\")
    echo res
}

@NonCPS
String runAndWait(Object cmd){
    def proc = cmd.execute()
    def output = new StringWriter()
    def error = new StringWriter()
    //wait for process ended and catch stderr and stdout 
    proc.waitForProcessOutput(output, error)
    //check there is no error
    assert error.toString().trim().size()==0: "$error"
    //assert proc.exitValue()==0 //we can do check with error code
    //return stdout from closure 
    return output.toString()
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自命令行的ZF脚本为cron

来自分类Dev

通过命令行和curl发送HTTP请求

来自分类Dev

来自命令行的带有奇数总和的 Shell 脚本

来自分类Dev

是否可以从命令行调用groovy脚本方法?

来自分类Dev

在CURL请求中从JSON传递键值(命令行)

来自分类Dev

创建用于运行REST请求的Groovy脚本

来自分类Dev

来自命令行的远程分支的存储库中的Gitlab合并请求不创建任何合并提交

来自分类Dev

PHP脚本中cURL请求的奇怪行为

来自分类Dev

bash脚本curl请求中的转义变量

来自分类Dev

Kibana和groovy脚本

来自分类Dev

groovy,脚本:this 和 jenkinsfile

来自分类Dev

使用数组参数将 POST cURL PHP 请求转换为 cURL 命令行

来自分类Dev

当使用PHP curl和命令行中的curl时,来自Google的响应是不同的

来自分类Dev

如何在Jenkins Groovy脚本中执行HTTP POST请求?

来自分类Dev

Groovy脚本-从SOAP UI自动请求并保存响应

来自分类Dev

如何在groovy脚本中访问SOAP请求-SOAP UI

来自分类Dev

当通过命令行使用curl时,HAproxy不会将请求从http转发到https

来自分类Dev

如何从curl请求获取响应时间(通过命令行)

来自分类Dev

Gearman和多个curl请求

来自分类Dev

通过cURL向Google App脚本发送请求

来自分类Dev

限制bash脚本发出的cURL请求数量的速率

来自分类Dev

如何基于 CURL 为 post 请求构建放心脚本

来自分类Dev

请求-Python命令行行为与运行脚本时的行为不同

来自分类Dev

请求-Python命令行行为与运行脚本时的行为不同

来自分类Dev

如何获得Perl脚本以接受来自STDIN和命令行参数的参数?

来自分类Dev

如何获得Perl脚本以接受来自STDIN和命令行参数的参数?

来自分类Dev

Lint:来自命令行的abortOnError

来自分类Dev

处理来自 cURL 请求的 JSON 响应的问题

来自分类Dev

PHP / cURL脚本请求另一个PHP脚本并在响应之前退出

Related 相关文章

  1. 1

    来自命令行的ZF脚本为cron

  2. 2

    通过命令行和curl发送HTTP请求

  3. 3

    来自命令行的带有奇数总和的 Shell 脚本

  4. 4

    是否可以从命令行调用groovy脚本方法?

  5. 5

    在CURL请求中从JSON传递键值(命令行)

  6. 6

    创建用于运行REST请求的Groovy脚本

  7. 7

    来自命令行的远程分支的存储库中的Gitlab合并请求不创建任何合并提交

  8. 8

    PHP脚本中cURL请求的奇怪行为

  9. 9

    bash脚本curl请求中的转义变量

  10. 10

    Kibana和groovy脚本

  11. 11

    groovy,脚本:this 和 jenkinsfile

  12. 12

    使用数组参数将 POST cURL PHP 请求转换为 cURL 命令行

  13. 13

    当使用PHP curl和命令行中的curl时,来自Google的响应是不同的

  14. 14

    如何在Jenkins Groovy脚本中执行HTTP POST请求?

  15. 15

    Groovy脚本-从SOAP UI自动请求并保存响应

  16. 16

    如何在groovy脚本中访问SOAP请求-SOAP UI

  17. 17

    当通过命令行使用curl时,HAproxy不会将请求从http转发到https

  18. 18

    如何从curl请求获取响应时间(通过命令行)

  19. 19

    Gearman和多个curl请求

  20. 20

    通过cURL向Google App脚本发送请求

  21. 21

    限制bash脚本发出的cURL请求数量的速率

  22. 22

    如何基于 CURL 为 post 请求构建放心脚本

  23. 23

    请求-Python命令行行为与运行脚本时的行为不同

  24. 24

    请求-Python命令行行为与运行脚本时的行为不同

  25. 25

    如何获得Perl脚本以接受来自STDIN和命令行参数的参数?

  26. 26

    如何获得Perl脚本以接受来自STDIN和命令行参数的参数?

  27. 27

    Lint:来自命令行的abortOnError

  28. 28

    处理来自 cURL 请求的 JSON 响应的问题

  29. 29

    PHP / cURL脚本请求另一个PHP脚本并在响应之前退出

热门标签

归档