我在Windows 7 localhost上安装了Jenkins和Subversion。他们独立工作。
我安装了Jenkins的Subversion插件。从这个页面https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin#SubversionPlugin-Windowsspecificpostcommithook我有post-commit.bat和描述的vbs脚本。
此可视基本代码失败:
url = jenkins + "crumbIssuer/api/xml?
xpath=concat(//crumbRequestField,"":"",//crumb)"
Set http = CreateObject("Microsoft.XMLHTTP")
http.open "GET", url, False
出现此错误:
javax.servlet.ServletException:必须是POST,不能GET 在hudson.model.AbstractModelObject.requirePOST(AbstractModelObject.java:88)
我认为这段代码正在获得CSRF保护令牌的碎屑,但失败了。
https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API说:
Jenkins uses the "Prevent Cross Site Request Forgery exploits"
security option (which it should), when you make a POST request,
you have to send a CSRF protection token as an HTTP request header.
我没有开启CSRF保护,虽然我知道我应该,出于简单的缘故。
* 我删除了.vbs脚本文件的GET部分,现在它只调用POST部分,并且没有引用crumb变量或根本不需要更改请求标头但我仍然得到了#34;必须是POST,不能GET"错误。
是什么给出了?
答案 0 :(得分:0)
我配置了jenkins: 管理Jenkins>配置全局安全>检查"防止跨站请求伪造攻击" (您可以离开"启用安全性"取消选中)>默认Crumb Issuer
这有点帮助(GET成功但POST仍然以同样的方式失败)。
如何让POST工作?这个家伙的答案回答了我的问题。您必须配置您的项目进行SCM轮询,但不要担心,您可以将其设置为每年轮询一次。