SVN post-commit和Jenkins的问题

时间:2012-07-17 11:13:26

标签: svn jenkins post-commit-hook

我正在努力让CI与詹金斯合作。到目前为止,我们一直在我们的环境中执行两个预定的构建,但我们的开发人员希望CI能够正常运行。我已按照Jenkins Subversion插件维基页面中的说明进行操作:

https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin

这让我得到了一个在命令行执行的脚本就好了,但是当我在Subversion中提交更改(使用TortoiseSVN客户端)时,提交似乎挂起,我没有看到Jenkins得到通知。

这是我的剧本:

#!/bin/sh

REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
XSLT_FILE=/var/www/svn/codelog.xslt
RSS_FILE=/var/www/html/code_all.rss
MAX_RESULTS=40

/usr/bin/wget \
  --auth-no-challenge \
  --no-check-certificate \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  --timeout=2 \
  https://192.168.100.16/subversion/${UUID}/notifyCommit?rev=$REV
svn log "file://$REPOS" --limit "$MAX_RESULTS" -v --xml | xsltproc "$XSLT_FILE" - > "$RSS_FILE"

RSS源已经在脚本中。这已经工作了一年多。

我已经更新了文件权限,以防出现问题:

[root@Subversion hooks]# ls post-commit -ao
-rwxrwxr-x 1 apache 530 Jul 17 06:27 post-commit

5 个答案:

答案 0 :(得分:5)

为了在Jenkins中启用推送模式,您应该在作业的配置页面中启用 Poll SCM 构建触发器。 它告诉Jenkins它应该在SCM发生变化时构建作业。

因为您不必进行任何轮询(从钩子中获取信息),您可以将该字段留空。

答案 1 :(得分:2)

尝试增加你的超时 - 2秒就像......太低了。

这对我有用:

/usr/bin/wget --http-user=jenkins \
              --http-passwd=passwordGoesHere \
              --header "Content-Type:text/plain;charset=UTF-8" \
              --post-data "`svnlook changed --revision $REV $REPOS`" \
              --output-document "/var/log/svn/svn-notify-commit-post" \
              --timeout=10 \
              --read-timeout=10 \
              --tries=2 \
              "http://jenkins:8082/jenkins/subversion/${UUID}/notifyCommit?rev=$REV" \
              >> /var/log/svn/svn-notify-commit-post.log 2>&1

(确保您拥有正确用户拥有的/var/log/svn目录。)

此外,启用SCM轮询并设置cron规则,如*/30 * * * *

答案 2 :(得分:2)

请查看您的网址。由于Jenkins是一个在servlet容器中运行的Web应用程序,因此必须使用以下工具:

HTTP(S)://服务器名:?SERVER_PORT / APPLICATION_NAME /颠覆/ $ {UUID} / notifyCommit转= $ REV“

想法是传递

“颠覆/ $ {UUID} / notifyCommit?转= $ REV”

到正确的地方。

答案 3 :(得分:1)

我从未喜欢过如何编写SVN插件页面。很容易阅读它,说你需要在SVN中设置一个Post Commit Hook来使事情有效。你没有!

我们的Jenkins盒子上有大约10个版本。所有这些都链接到SVN存储库,并且全部由SVN存储库中的更改触发。他们都不依赖于在SVN中使用Post Commit Hook。

为此,我们已将构建配置为按计划简单地“轮询SCM”。 “提交”构建使用“* / 5 * * * *”的时间表。每5分钟进行一次民意调查。我们的“每日”版本使用“1 * * * *”的时间表,以便在有任何更改时,构建将在凌晨1:01开始。

答案 4 :(得分:0)

您是否检查过是否启用了SELinux?

我遇到了同样的问题并在此处写了一个解决方案https://stackoverflow.com/a/15408506/2169568

我得到的错误是它无法连接到url(但是从命令行调用它确实有效)。