我正在创建一个jenkins管道,它会在某个时候创建一个Jira Ticket。不幸的是,我得到了:java.io.NotSerializableException: org.codehaus.groovy.runtime.EncodingGroovyMethods$1
编码:
token = createEncodedToken()
def curlCommand = "curl -H 'Authorization: Basic ${token}' -X POST -d \'${payload}\' -H 'Content-Type: application/json' ${jira_url} > JIRA_TICKET"
try {
println "executing: ${curlCommand}"
sh "${curlCommand}"
} catch (NotSerializableException err) {
println "${err}"
}
创建编码令牌:
def createEncodedToken() {
def auth = "${jira_user}:${jira_password}"
return auth.bytes.encodeBase64()
}
得到的curlCommand可以工作!我可以在curl或示例管道中发送它。但是当我在我的jira.groovy脚本中使用它时,我就得到了异常。
[Pipeline] echo
executing: curl -H "Authorization: Basic MYTOKEN=" -X POST -d "{"fields":{"project":{"key":"KEY"},"summary":"Pipeline Test","description":"Creating of an issue using project keys and issue type names using the REST API","issuetype":{"name":"Story"}}}" -H "Content-Type: application/json" https://MYJIRA/rest/api/2/issue/ > JIRA_TICKET
[Pipeline] sh
[plinetest] Running shell script
[Pipeline] echo
java.io.NotSerializableException: org.codehaus.groovy.runtime.EncodingGroovyMethods$1
输出文件JIRA_TICKET用于读取生成的问题密钥。
有趣的事实:虽然我得到了一个异常,但票证已创建......但我无法读取JIRA_TICKET文件。
我目前正在Sandbox Pipeline中进行测试:
def jira = fileLoader.fromGit('jira.groovy', 'MYBITBUCKET-pipeline.git', 'master', 'CREDS', '')
echo "create ticket"
def payload = '{"fields":{"project":{"key":"KEY"},"summary":"Pipeline Test","description":"Creating of an issue using project keys and issue type names using the REST API","issuetype":{"name":"Story"}}}'
jira.createTicket(payload)
调用经过测试,运行正常。也许是jira lib导致了这个问题?我知道jenkins管道的Serializable概念,但我不明白我错过了什么。我现在很无知...任何帮助都是感激的。
2条答案
按热度按时间q5lcpyga1#
encodeBase64()
不返回字符串。它返回一个实现groovy.lang.Writeable
的类,该类具有toString()
方法。您需要显式调用toString()。
iqxoj9l92#
请尝试使用
new URL(jira_url).openConnection();
而不是curl。您可以参考此Groovy built-in REST/HTTP client?