我正在创建一个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}"
}
createEncodedToken:
def createEncodedToken() {
def auth = "${jira_user}:${jira_password}"
return auth.bytes.encodeBase64()
}
生成的curlCommand工作!我可以用curl或样本管道发送它。但只要我把它用在我的jira里。我得到了一个异常。
[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文件。
我目前正在沙盒管道中测试它:
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概念,但我没有得到我错过的东西。我现在一点头绪都没有……
encodeBase64()
不返回字符串。它返回一个实现groovy.lang.Writeable
的类,该类有一个toString()
方法。
你需要显式地调用toString()
请尝试使用new URL(jira_url).openConnection();
代替curl。你可以参考这个Groovy内置REST/HTTP客户端?