使用curl从Jenkins创建拉取请求

问题描述 投票:0回答:1

尝试在Windows服务器上的Jenkins上使用curl创建github拉取请求。 Jekins 常规代码来创建 PR:

stage('Git Pull Request') {
    steps {
        script {
                withCredentials([usernamePassword(credentialsId: 'GitHubToken', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
                // Create a GitHub pull request
                def prResponse = bat (
                    script: "curl -L -X POST -u $USERNAME:$PASSWORD  https://git.company.com/api/v3/repos/vanpa/test_repo/pulls -d  \"{\"title\":\"title\", \"body\":\"body\", \"head\":\"delete_test2\", \"base\":\"delete_test1\"}\"",
                   returnStdout: true)
                echo "${prResponse}"
                }
        }
    }
}

这将返回以下输出::

D:\Jenkins\workspace\test 2>curl -L -X POST -u vanpa:****  https://git.company.com/api/v3/repos/vanpa/test_repo/pulls -d  "{"title":"title", "body":"body", "head":"delete_test2", "base":"delete_test1"}" 
{
  "message": "Problems parsing JSON",
  "documentation_url": "https://docs.github.com/[email protected]/rest/reference/pulls#create-a-pull-request"
}

如何解决这个问题?

类似问题的其他解决方案建议在 Windows 上使用单引号问题。已删除所有单引号,仅使用双引号。

curl github-api jenkins-groovy
1个回答
0
投票

正如您所发现的,在批处理脚本中手动滚动 JSON 参数很容易出错。在像这样的简单情况下,您可能只需修复转义字符就可以逃脱惩罚。由于您有双重扩展(首先在 groovy 中,然后在批处理脚本中),您需要双重转义

\\\"

通常您会希望避免这种情况,并使用 Groovy 处理 JSON,将其保存到临时文件,然后使

curl
发布该文件而不是内联数据。
writeJSON
steppipeline-utility-steps 插件提供。

stage('Git Pull Request') {
    steps {
        script {
            withCredentials([usernamePassword(credentialsId: 'GitHubToken', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
                // Create a GitHub pull request
                def data = [
                    'title': 'title',
                    'body': 'body',
                    'head': 'delete_test2',
                    'base': 'delete_test1',
                ]
                writeJSON file: 'data.json', json: data
                def prResponse = bat (
                    script: "curl -L -X POST -u $USERNAME:$PASSWORD https://git.company.com/api/v3/repos/vanpa/test_repo/pulls --data @data.json",
                   returnStdout: true)
                echo prResponse
                }
        }
    }
}

此外,在 groovy 中扩展

$PASSWORD
是一个坏主意,Jenkins 可能已经在这个问题上纠缠过你了。

© www.soinside.com 2019 - 2024. All rights reserved.