我正在尝试向 Jenkins API 提交 POST 以创建新作业。我遵循了 API 文档并使用 Postman 来提出特定请求。
当我发出请求时,服务器返回ERROR 500并出现以下错误:
<html><head><title>Error 500</title></head>
状态码:500
异常:无法读取 /var/lib/jenkins/jobs/Tes234t6.dev/config.xml堆栈跟踪:
hudson.util.IOException2:无法读取 /var/lib/jenkins/jobs/Tes234t6.dev/config.xml
在 hudson.XmlFile.read(XmlFile.java:145)
在 hudson.model.Items.load(Items.java:220)
在 hudson.model.ItemGroupMixIn.createProjectFromXML(ItemGroupMixIn.java:235)
在 hudson.model.ItemGroupMixIn.createTopLevelItem(ItemGroupMixIn.java:167)
在 jenkins.model.Jenkins.doCreateItem(Jenkins.java:2876)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:616)
在 org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:288)
在 org.kohsuke.stapler.Function.bindAndInvoke(Function.java:151)
在 org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:90)
在 org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:111)
在 org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
在 org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:677)
在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:770)
在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:583)
在 org.kohsuke.stapler.Stapler.service(Stapler.java:214)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:45)
在 winstone.ServletConfiguration.execute(ServletConfiguration.java:248)
在 winstone.RequestDispatcher.forward(RequestDispatcher.java:333)
在 winstone.RequestDispatcher.doFilter(RequestDispatcher.java:376)
在 hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:95)
在 hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:87)
在 winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
在 winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
在 hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
在 winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
在 winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
在 hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:64)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
在 hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
在 hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
在 hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
在 winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
在 winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
在 org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:50)
在 winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
在 winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
在 hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
在 winstone.FilterConfiguration.execute(FilterConfiguration.java:194)
在 winstone.RequestDispatcher.doFilter(RequestDispatcher.java:366)
在 winstone.RequestDispatcher.forward(RequestDispatcher.java:331)
在 winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:227)
在 winstone.RequestHandlerThread.run(RequestHandlerThread.java:150)
在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
在 java.util.concurrent.FutureTask.run(FutureTask.java:166)
在 winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
在 java.lang.Thread.run(Thread.java:679)
引起:com.thoughtworks.xstream.io.StreamException: : 在开始标记之前只允许空白内容,而不是 - (位置:看到 START_DOCUMENT -...@1:1)
在 com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:124)
在 com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148)
在 com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141)
在 com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118)
在 com.thoughtworks.xstream.io.xml.AbstractPullReader.moveDown(AbstractPullReader.java:103)
在 com.thoughtworks.xstream.io.xml.XppReader.<init>(XppReader.java:63)
在 com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:54)
在 com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:65)
在 com.thoughtworks.xstream.XStream.fromXML(XStream.java:925)
在 hudson.XmlFile.read(XmlFile.java:143)
... 66 更多
原因:org.xmlpull.v1.XmlPullParserException:在开始标记之前只允许空白内容,而不是 - (位置:看到 START_DOCUMENT -...@1:1)
在 org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1519)
在 org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1395)
在 org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
在 com.thoughtworks.xstream.io.xml.XppReader.pullNextEvent(XppReader.java:109)
... 75 更多
由 Stapler 于 2013 年 6 月 7 日星期五 10:47:55 EDT 生成
我查看了我的 config.xml 文件,文件顶部没有空格。除此之外,我不确定它在说什么。我已经用谷歌搜索并查看了 SO,但没有找到与在 CLI 之外使用此 API 相关的任何内容。任何人有任何成功地做到这一点的经验或指针吗?
这是我向 API 发出的发布请求:
POST /createItem?name=Tes234t6.dev HTTP/1.1
Host: XXX.XXX.XXX.XXX:8080
Content-Type: text/xml
Authorization: Basic cm9vdDpjcm9zYnlhZG0xbg==
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="config.xml"; filename="config.xml"
Content-Type: text/xml
----WebKitFormBoundaryE19zNvXGzXaLvS5C