【问题标题】:Capturing responses from Jenkins with jq使用 jq 捕获 Jenkins 的响应
【发布时间】:2021-02-09 09:44:33
【问题描述】:

我目前正在处理一个 jenkinsfile,它没有任何方法来捕获响应,无论工作是否成功。

目前是这样的

      steps {
        sh """
        #!/bin/bash
        curl -d '{ \"ref\": \"${env.BRANCH_NAME}\" }' \\
          -H \"Accept: application/json\" \\
          '#somelink/api' \\
          -k -q
        """
      }
    }
  }
  post {
    success {
      slackSend(
        color: 'good',
        message: "Build success : ${env.JOB_NAME}-${env.BUILD_NUMBER}. <${env.BUILD_URL}|Go to build>"
      )
    }
    failure {
      slackSend(
        color: 'danger',
        message: "Build failed : ${env.JOB_NAME}-${env.BUILD_NUMBER}. <${env.BUILD_URL}|Go to build>"
      )
    }
    aborted {
      slackSend(
        color: '#858384',
        message: "Build aborted : ${env.JOB_NAME}-${env.BUILD_NUMBER}. <${env.BUILD_URL}|Go to build>"
      )
    }

在 Jenkins 中它会显示结果

```+ curl -d '{ "ref": "service" }' -H 'Accept: application/json' http://somelink/payload -k -q

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed


  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    20    0     0  100    20      0     19  0:00:01  0:00:01 --:--:--    19
100    20    0     0  100    20      0      9  0:00:02  0:00:02 --:--:--     9
100    20    0     0  100    20      0      6  0:00:03  0:00:03 --:--:--     6
100    20    0     0  100    20      0      4  0:00:05  0:00:04  0:00:01     4
100    20    0     0  100    20      0      3  0:00:06  0:00:05  0:00:01     3
100    20    0     0  100    20      0      3  0:00:06  0:00:06 --:--:--     0
100    20    0     0  100    20      0      2  0:00:10  0:00:07  0:00:03     0
100    20    0     0  100    20      0      2  0:00:10  0:00:08  0:00:02     0
100    20    0     0  100    20      0      2  0:00:10  0:00:09  0:00:01     0
100    20    0     0  100    20      0      1  0:00:20  0:00:10  0:00:10     0
100    20    0     0  100    20      0      1  0:00:20  0:00:11  0:00:09     0
100    20    0     0  100    20      0      1  0:00:20  0:00:12  0:00:08     0
100    20    0     0  100    20      0      1  0:00:20  0:00:13  0:00:07     0
100    20    0     0  100    20      0      1  0:00:20  0:00:14  0:00:06     0
100    20    0     0  100    20      0      1  0:00:20  0:00:15  0:00:05     0
100    20    0     0  100    20      0      1  0:00:20  0:00:16  0:00:04     0
100    20    0     0  100    20      0      1  0:00:20  0:00:17  0:00:03     0
100    20    0     0  100    20      0      1  0:00:20  0:00:18  0:00:02     0
100    20    0     0  100    20      0      1  0:00:20  0:00:19  0:00:01     0
100    20    0     0    0    20      0      0 --:--:--  0:00:20 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:21 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:22 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:23 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:24 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:25 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:26 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:27 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:28 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:29 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:30 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:31 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:32 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:33 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:34 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:35 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:36 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:37 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:38 --:--:--     0
  0  4847    0     0    0    20      0      0 --:--:--  0:00:39 --:--:--     0{"status":"success","message":"triggered: umask 0022; r10k deploy environment service -pv\n\nWARN\t -> Environment \"SOMEBRANCH\"```

我在这里想要实现的是捕获"status":"success",如果出现这种情况,那么它应该继续执行success {} 步骤。否则进入failure{} 步骤。

脚本运行良好,并产生了应有的结果,但是在某些情况下,"status": 并不总是显示为成功,但它仍然在 jenkins 上显示一切都很好。任何帮助将不胜感激!

【问题讨论】:

标签: jquery jenkins jenkins-pipeline try-catch devops


【解决方案1】:

如果你想捕获输出,你应该这样做:

      steps {
        def captured_output = sh returnStdout: true, script: """
        #!/bin/bash
        curl -d '{ \"ref\": \"${env.BRANCH_NAME}\" }' \\ ...

在此期间,您可能希望使用-s--silent 选项抑制curl 调试输出:

curl -s -d ...

然后您可以解析输出,前提是它是有效的 JSON:

def parsed_data = readJSON text: captured_output

如果status 字段中的响应不成功,则可以使构建失败:

    if (parsed_data.status != "success") {
        error ("Miserably failed")
    }

然后您的发布步骤将进入failure 子句。

【讨论】:

    【解决方案2】:

    如果您可以安装http request plugins,它将真正帮助您实现您的期望,并且解析响应非常简单

    pipeline {
        agent any;
        stages {
            stage('call api') {
                steps {
                    script {
                        def response = httpRequest url: 'http://localhost:8080/api/json?pretty=true', authentication: 'credentialsID', customHeaders:[[name:'Accept', value:"application/json"]]
                        println("Status: "+response.status)
                        println("Content: "+response.content)
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 2014-12-16
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多