1

当我尝试通过提交后脚本调用 Jenkins 构建时,svn 返回拒绝访问失败。使用https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin上的说明,我第一次尝试使用 Jenkins 所在的特定配置。

第一个 Jenkins 配置:
[x] 启用安全性 => Jenkins 自己的用户数据库
[x] 防止跨站点请求伪造漏洞利用(启用了默认 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 提交后文件中只有一个命令。

wget http://SERVER_IP:8080/job/JOB_trunk/build?token=BUILD --tries=2 --timeout=2

这可以从命令行工作。詹金斯完成了这项工作。Jenkins 不会以我为wget提供--http-user--http-password的用户身份运行构建。虽然它不是按照我想要的用户构建的,但至少可以构建,无论是否带有?token选项。

sudo /var/svn/JOB/hooks/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 更改等...我只对从提交后挂钩触发构建感兴趣。

SVN 服务器运行在 CentOS6 上。
詹金斯在 Win7 上运行。

出于测试目的,我尝试使用脚本中的su命令触发构建并继续遇到问题。如果我从命令行运行脚本,它会成功构建作业,当 svn commit 触发挂钩时,它不会触发构建。

/bin/su -c `wget http://SERVER_IP:8080/job/JOB_trunk/build --tries=2 --timeout=2

任何关于正在发生的事情的见解都会让我成为一个非常快乐的人,并且在一周和几个小时试图让它发挥作用后非常感激。

4

1 回答 1

1

(我假设您的提交后文件中的“wget wget”是一个错字。)

对我来说,你的 CentOS6 服务器有一些网络内核问题。

现在我想知道哪个命令打印“失败:权限被拒绝”。我从未见过 wget 那样失败,它看起来更像是本地系统故障(如 open() 系统调用失败)。

要确认此类问题,请尝试以非 root 用户身份访问其他地址,例如 google.com。行得通吗?

还可以使用 strace 了解更多信息。

strace wget etc

并注意失败的线路。

如果是这样,您是否编译了自己的内核?您是否将 CONFIG_ADROID_PARANOID_NETWORK 设置为 true

注意:对于受 CSRF 保护的站点,您需要添加额外的参数来下载 crumb(这是在Subversion 插件页面中定义的。

于 2013-08-22T06:05:48.560 回答