繁体   English   中英

Curl在Jenkins管道脚本中返回无效的JSON错误,但在bash shell运行或Jenkins Freestyle作业中返回预期的响应

[英]Curl returns Invalid JSON error in a Jenkins Pipeline script but returns the expected response on a bash shell run or in a Jenkins Freestyle job

我正在编写一个Jenkins Pipeline工作,用于使用对我们内部AWS CLI包装器库的API调用来设置AWS基础结构。 在CentOS盒子上运行原始bash脚本或作为Jenkins Freestyle作业运行正常。 但是,它在管道作业的上下文中失败。 我认为管道工作的报价可能需要不同,但我不确定如何。

经过进一步调查后,我发现在Jenkins管道作业中运行脚本时,curl命令会从服务返回错误的响应。

pipeline {
    agent any

    stages {
        stage('Checkout code from Git'){
            steps {
                 echo "Checkout code from a GitHub repository"
                // Checkout code from a GitHub repository
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', trackingSubmodules: false]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxx', url: 'git@github.com:bbc/repo.git']]])
            }
        }
        stage('Call our internal AWS CLI Wrapper System API to perform an ACTION on a specified ENVIRONMENT') {
            steps {

                script {
                    if("${params.ENVIRONMENT}" == 'int' && "${params.ACTION}" == 'create'){
                        echo "ENVIRONMENT=${params.ENVIRONMENT}, ACTION=${params.ACTION}"
                        echo ""
                        sh '''#!/bin/bash
                            # Create Neptune Cluster for the Int environment
                            cd blah-db
                            echo "Current working directory is $PWD"
                            CLOUD_FORMATION_FILE=$PWD/infrastructure/templates/neptune-cluster.json
                            echo "The CloudFormation file to operate on is $CLOUD_FORMATION_FILE"
                            echo "Running jq to transform the source CloudFormation file"
                            template=$(jq -M '.Parameters.Env.Default="int"' $CLOUD_FORMATION_FILE)
                            echo "Echoing the transformed CloudFormation file: \n$template"
                            echo "Running curl to make the http request to our internal AWS CLI Wrapper System"
                            curl -d "{\"aws_account\":  \"1111111111\", \"region\": \"us-east-1\", \"name_suffix\":  \"cluster\", \"template\": $template}" \
                            -H 'Content-Type: application/json'  -H 'Accept: application/json' https://base.api.url/v1/services/blah-neptune/int/stacks \
                            --cert /path/to/client/certificate/client.crt --key /path/to/client/private-key/client.key
                            cd ..
                            pwd

                            # Set a timer to run for 300 seconds or 5 minutes to create a delay to allow for the Neptune Cluster to be fully provisioned first before adding instances to it.


                        '''

                    }
                }
            }
        }
    }
}

我从API调用中获得的实际结果:

{"error": "Invalid JSON. Expecting property name: line 1 column 1 (char 1)"}

尝试更改curl如下:

curl -d '{"aws_account":  "1111111111", "region": "us-east-1", "name_suffix":  "cluster", "template": $template}'

或者将整个cmd分配给变量并打印出来以查看它是否是您想要的。

cmd = '''#!/bin/bash
         cd blah-db
      ...
      '''

echo cmd // compare the output string to the cmd of freestyle job.

sh cmd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM