Trouble with SVN post-commit and Jenkins

只谈情不闲聊 提交于 2019-11-30 03:35:05

问题


I am trying to get CI going with Jenkins. To date, we have been performing two scheduled builds in our environment, but our dev staff wants to get CI working. I have followed the instruction outlined in the Jenkins Subversion Plugin wiki page:

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

This got me to a script that executes at the command line just fine, however when I commit a change in Subversion (using the TortoiseSVN client), the commit seems to hang and I don't see Jenkins getting notified.

Here is my script:

#!/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"

The RSS feed was already in the script. That has been working for over a year.

I have updated the file permissions as well, in case that was the problem:

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

回答1:


I have never liked how the SVN Plugin page is written. It is to easy to read it to say that you need to set up a Post Commit Hook in SVN to make things work. You Don't!

We have about 10 builds on our Jenkins box. All of them are linked to SVN repositories, and all a triggered by changes in the SVN repository. None of them rely on having to use a Post Commit Hook in SVN.

To do this, we have configured the builds to simply "Poll SCM" on a schedule. The "commit" builds use a schedule of "*/5 * * * *". This polls every 5 minutes. Our "daily" builds use a schedule of "1 1 * * *" so that the builds would kick off at 1:01 AM if there are any changes.




回答2:


In order to enable push mode in Jenkins, you should enable the Poll SCM build trigger in configuration page of your job. It tells Jenkins that it should build the job whenever SCM changes occur.

Because you don't have to do any polling (you get the info from the hook) you can leave the field blank.




回答3:


Please take a look at your URL. Since Jenkins is a web application running in a servlet container the following one must work:

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

The idea is to pass

"subversion/${UUID}/notifyCommit?rev=$REV"

to the right place.




回答4:


Try increasing your timeout -- 2 seconds is like... Too low.

This is what works for me:

/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

(Make sure you have a /var/log/svn directory owned by the proper user).

Also, enable SCM polling and set a cron rule like */30 * * * *.




回答5:


Did you check if you have SELinux enabled?

I had the same problem and wrote a solution here https://stackoverflow.com/a/15408506/2169568

The error I was getting was that it could not connect to the url (but when invoking it from commandline it did work).



来源:https://stackoverflow.com/questions/11521302/trouble-with-svn-post-commit-and-jenkins

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!