Проблемы с SVN post-commit и Jenkins

Я пытаюсь заставить CI работать с Дженкинсом. На сегодняшний день мы выполняем две запланированные сборки в нашей среде, но наш персонал разработчиков хочет, чтобы CI работал. Я следовал инструкциям, изложенным на вики-странице Jenkins Subversion Plugin:

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

Это привело меня к сценарию, который прекрасно выполняется в командной строке, однако, когда я фиксирую изменение в Subversion (используя клиент TortoiseSVN), коммит, кажется, зависает, и я не вижу, чтобы Дженкинс получал уведомление.

Вот мой сценарий:

#!/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 ответов

Решение

Мне никогда не нравилось, как написана страница плагина SVN. Легко читать, чтобы сказать, что вам нужно настроить Post Commit Hook в SVN, чтобы все заработало. Вы не делаете!

У нас есть около 10 сборок на нашей коробке Дженкинс. Все они связаны с репозиториями SVN, и все они вызваны изменениями в репозитории SVN. Никто из них не полагается на необходимость использовать Post Commit Hook в SVN.

Для этого мы настроили сборки так, чтобы они просто "опрашивали SCM" по расписанию. Сборки "commit" используют расписание "*/5 * * * *". Это опросы каждые 5 минут. Наши "ежедневные" сборки используют график "1 1 * * *", чтобы сборки начинались в 1:01 AM, если есть какие-либо изменения.

Чтобы включить режим push в Jenkins, вы должны включить триггер сборки Poll SCM на странице конфигурации своей работы. Он говорит Дженкинсу, что он должен строить работу всякий раз, когда происходят изменения SCM.

Поскольку вам не нужно выполнять какие-либо опросы (вы получаете информацию из хука), вы можете оставить поле пустым.

Пожалуйста, посмотрите на ваш URL. Поскольку Jenkins - это веб-приложение, работающее в контейнере сервлета, должно работать следующее:

HTTP (s):// имя_сервера:server_port/application_name/ подрывная /${UUID}/notifyCommit оборотов =$REV"?

Идея состоит в том, чтобы передать

"Подрывной /${UUID}/notifyCommit? Обороты =$REV"

в нужное место.

Попробуйте увеличить время ожидания - 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 * * * *,

Вы проверяли, включен ли у вас SELinux?

У меня была такая же проблема и я написал решение здесь /questions/41179907/ne-udaetsya-otkryit-fajl-svnrepodbtxn-current-lock-razreshenie-zaprescheno/41179915#41179915

Ошибка, которую я получал, заключалась в том, что он не мог подключиться к URL-адресу (но при вызове его из командной строки он работал).

Другие вопросы по тегам