当我尝试通过post-commit脚本调用Jenkins构建时,svn返回拒绝访问的失败。使用https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin处的指示,我的第一次尝试接着是Jenkins所在的具体配置。
First Jenkins配置:
[x]启用安全性=> Jenkins自己的用户数据库
[x]防止跨站点请求伪造攻击(w /& w / out 默认Crumb Issuer 启用)
此返回
Error: Connecting to SERVER_IP:8080... failed: Permission denied.
使用各种 wget 选项(例如http-user,user,http-password,password等)多次失败后,我更改了Jenkins服务器配置以停止使用 CSRF 。这也失败了。我传递了用户API令牌,作业API令牌和普通用户名/密码。当这些失败时,我尝试使用 wget 从命令行本身调用作业,并且令人惊讶地成功了。
当前Jenkins配置:
禁用所有安全选项。我没有使用用户而且我没有使用令牌或任何东西。
SVN post-commit文件中只有一个命令。
wget http://SERVER_IP:8080/job/JOB_trunk/build?token=BUILD --tries=2 --timeout=2
这可以从命令行运行。詹金斯建立了这份工作。 Jenkins不会像我使用 - http-user 和 - http-password 提供 wget 的用户一样运行构建。虽然它不构建为我想要的用户,但至少使用?token 选项进行构建。
如果我使用sudo /var/svn/JOB/hooks/post-commit
运行post-commit挂钩,则会运行Jenkins构建。
每次我提交svn时,都会运行post-commit钩子并试图触发Jenkins构建,然后我回到下面的错误。
Error: post-commit hook failed (exit code 1) with output:
Error: --2013-08-21 21:36:37-- http://SERVER_IP:8080/job/JOB_trunk/build?token=BUILD
Error: Connecting to SERVER_IP:8080... failed: Permission denied.
虽然我可以手动构建东西,但是可以轮询svn更改,等等......我只对从post-commit钩子触发构建感兴趣。
SVN服务器在CentOS6上运行 Jenkins在Win7上运行。
出于测试目的,我尝试使用脚本中的 su 命令触发构建,并继续遇到问题。如果我从命令行运行脚本,它会成功构建作业,当svn commit触发钩子时,它不会触发构建。
/bin/su -c `wget http://SERVER_IP:8080/job/JOB_trunk/build --tries=2 --timeout=2
任何有关正在发生的事情的见解都会让我成为一个非常幸福的人,并且在经过一周和数小时的尝试后,我会非常感激。
答案 0 :(得分:1)
(我假设你的提交后文件中的“wget wget”是一个错字。)
对我来说,你的CentOS6服务器有一些网络内核问题。
现在我想知道哪个命令打印“失败:权限被拒绝”。我从来没有见过wget失败,它看起来更像本地系统故障(如open()系统调用失败)。
要确认此类问题,请尝试将wget作为非root用户访问其他地址,例如google.com。它有效吗?
还可以使用strace了解更多信息。
strace wget etc
并记下失败的一行。
如果是这样,你编译自己的内核了吗? Have you set CONFIG_ADROID_PARANOID_NETWORK to true?
注意:对于CSRF保护的站点,您需要添加额外的参数来下载碎屑(这在Subversion plugin page中定义。