我正在努力让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
答案 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(但是从命令行调用它确实有效)。