8

我正试图让 CI 与 Jenkins 合作。迄今为止,我们已经在我们的环境中执行了两次预定的构建,但我们的开发人员希望让 CI 正常工作。我已按照 Jenkins Subversion Plugin wiki 页面中概述的说明进行操作:

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
4

5 回答 5

5

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

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

于 2012-07-17T12:40:18.640 回答
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 * * * *.

于 2012-07-17T14:01:58.853 回答
2

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

http(s)://server_name:server_port/application_name/subversion/${UUID}/notifyCommit?rev=$REV"

这个想法是通过

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

到正确的地方。

于 2013-02-26T16:13:41.277 回答
1

我从不喜欢 SVN 插件页面的编写方式。说你需要在 SVN 中设置一个 Post Commit Hook 才能使事情正常工作,这很容易阅读。你没有!

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

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

于 2012-07-17T15:11:47.563 回答
0

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

我有同样的问题并在这里写了一个解决方案https://stackoverflow.com/a/15408506/2169568

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

于 2013-03-14T12:06:52.110 回答