尝试在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 上使用单引号问题。已删除所有单引号,仅使用双引号。
正如您所发现的,在批处理脚本中手动滚动 JSON 参数很容易出错。在像这样的简单情况下,您可能只需修复转义字符就可以逃脱惩罚。由于您有双重扩展(首先在 groovy 中,然后在批处理脚本中),您需要双重转义
\\\"
。
通常您会希望避免这种情况,并使用 Groovy 处理 JSON,将其保存到临时文件,然后使
curl
发布该文件而不是内联数据。 writeJSON
step 由 pipeline-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 可能已经在这个问题上纠缠过你了。