首页 > 解决方案 > 如何将 HTTP 请求的正文设置为文件的内容

问题描述

我想使用工作区中的文件内容作为主体,从 Jenkins 管道调用 RESTful 端点。我正在尝试使用 HTTP 请求插件(https://plugins.jenkins.io/http_request),但无法弄清楚如何做到这一点。基本流程: 1) 从源代码控制获取文件,即 GitHub 2) 使用 shell 脚本通过 sed 更新我的工作区中的文件 3) 使用该文件作为 HTTP 请求调用的主体

我一直在尝试将文件的内容复制到变量中,然后在请求中使用它,但这不起作用,因为我似乎无法弄清楚如何将文件内容保存到变量中,然后在下一个中引用它步。

标签: jenkinshttprequestjenkins-pipeline

解决方案


这是一个我现在正在工作的简单管道,如果其他人试图实现这一点,可以将其用作示例。注意我必须调整 Blue Ocean 创建的代码,因为它将环境变量放在单引号中。

pipeline {
  agent any
  stages {
    stage('stage1') {
      steps {
        httpRequest(url: 'http://banka.mybluemix.net/loans/v1/quote?loanAmount=9501.64&annualInterestRate=28&termInMonths=36', acceptType: 'APPLICATION_JSON', contentType: 'APPLICATION_JSON', httpMode: 'GET', responseHandle: 'STRING', validResponseCodes: '200', outputFile: 'body.json')
        script {
          env.requestBody = readFile 'body.json'
        }

        echo "${env.requestBody}"
        httpRequest(url: 'https://postman-echo.com/post', acceptType: 'APPLICATION_JSON', contentType: 'APPLICATION_JSON', httpMode: 'POST', outputFile: 'postmanOutput.txt', requestBody: "${env.requestBody}", responseHandle: 'STRING', validResponseCodes: '200')
        script {
          env.POSTMANOUT = readFile 'postmanOutput.txt'
        }

        echo "${env.POSTMANOUT}"
      }
    }
  }
}

推荐阅读