Jenkins管道-使用sh和curl获取java.io.NotSerializableException



我正在创建一个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客户端?

相关内容

  • 没有找到相关文章

最新更新