【问题标题】:svn post-commit call to jenkins build http failuresvn post-commit 调用 jenkins 构建 http 失败
【发布时间】:2013-08-24 16:12:41
【问题描述】:

当我尝试通过提交后脚本调用 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 post-commit 文件中只有一个命令。

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 上运行。
Jenkins 在 Win7 上运行。

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

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

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

【问题讨论】:

    标签: svn jenkins subversive


    【解决方案1】:

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

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

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

    要确认此类问题,请尝试以非 root 用户身份对其他地址(例如 google.com)执行 wget。有用吗?

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

    strace wget etc
    

    并记下失败的行。

    如果是这样,您是否编译了自己的内核? Have you set CONFIG_ADROID_PARANOID_NETWORK to true?

    注意:对于受CSRF保护的站点,您需要添加额外的参数来下载面包屑(这在Subversion plugin page中定义。

    【讨论】:

    • 是的,这是一个错字。我会解决这个问题,谢谢你指出。我还没有编译我自己的内核。完成后,我将添加您的建议结果。感谢您的帮助@coffeebreaks,非常感谢。
    • 我收到错误 Error: strace: ptrace(PTRACE_TRACEME, ...): Permission denied when I use the command.
    • 您的 CentOS6 配置对其用户有很大的限制,无论是在配置级别,还是使用像 SELinux 这样的安全服务。你自己安装过系统吗?你有没有重新编译内核?您是否添加了 SELinux 之类的东西?例如,它允许您禁用跟踪(阅读danwalsh.livejournal.com/49336.htmwiki.centos.org/HowTos/SELinuxl)。现在这可能变成了一个 SELinux 问题,并且可能与 svn、jenkins 和颠覆性无关......
    • 是的,我自己安装了系统。不,我没有重新编译内核,实际上我以前从未重新编译过内核。安装 SELinux 是因为我需要允许更改。在提供的信息之后,您可能是正确的,这是系统设置问题,而不是 SVN/Jenkins 配置问题。感谢您的帮助。当我得到你的答案时已经很晚了,所以我没有看到重新编译内核是否有效。再次非常感谢您的理解和帮助。这是我能弄清楚发生了什么的最远距离。
    • 它是 SELinux。我进去并将其更改为许可模式,我现在从脚本返回 http 200 ok。再次非常感谢您的帮助。我现在要去了解更多关于 SELinux 的信息。由于这是我的个人家庭服务器,我现在不必担心只是将其置于许可模式。
    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 2010-12-08
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多