Trigger Hudson основывается на коммите SVN - PullRequest
11 голосов
/ 25 января 2011

Я уже настроил систему управления версиями (Subversion), которая будет использоваться разработчиками для фиксации и обновления своего кода (скажем, его адрес https://server/svn/project).Только аутентифицированные пользователи смогут иметь доступ к SVN проекта.

С другой стороны, я установил Hudson в качестве сервера непрерывной интеграции проекта (адрес проекта server:8080/job/project).

Я бы хотел добиться следующего:

  • Сборки Hudson автоматически запускаются при фиксации SVN.
  • Письма отправляются соответствующим разработчикам (тем, кто совершилкод), когда его зафиксированный код не создается, то есть, когда пользователь А фиксирует код, который не компилируется, только пользователь А получает электронное письмо, содержащее уведомление.авторизация для пользователей Hudson, потому что я не хочу быть ни с кем открытым.

    Я видел некоторые предложения для post-commit хуков, но до сих пор ни один из них не работал.подскажите что делать по обоим вопросам?Конкретные шаги будут оценены.

Ответы [ 4 ]

7 голосов
/ 25 января 2011

Согласно "Построение программного проекта # Сборки с изменениями в Subversion / CVS" , Хадсон должен опросить репозиторий SVN, чтобы обнаружить изменения и запустить сборку.

Однако, это может быть инициировано на каждом коммите из SVN, как в этом потоке .
Официальный скрипт находится на странице Subversion Plugin .

REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  --timeout=2 \
  http://server/hudson/subversion/${UUID}/notifyCommit?rev=$REV

Но это указано:

Чтобы это работало, ваш Хадсон должен разрешить анонимный доступ для чтения к системе .
Если контроль доступа к вашему Hudson более строг, вам может потребоваться указать имя пользователя и пароль , в зависимости от того, как настроена ваша аутентификация.

4 голосов
/ 10 апреля 2012

Чтобы запустить сборку, когда в SVN есть фиксация, вы должны (1) настроить удаленную сборку задания hudson и (2) сделать хук SVN ...

первая часть довольно проста... чтобы подключить хук к / var / lib / svn // hooks и переименовать post-commit.tmpl в post-commit, вы можете сделать что-то вроде

#!/bin/bash
# Este script comprueba si se han hecho cambios en un directorio concreto,
# y en tal caso lanza una build en Jenkins

REPOS="$1"
REV="$2"
JENKINS_JOB="$3"
JENKINS_USER=admin
JENKINS_PASSWORD=****
JENKINS_HOST=<hostname>

if [ -n $(svnlook dirs-changed $REPOS --revision $REV | fgrep "tags\/") ];then
 wget --quiet --auth-no-challenge --no-check-certificate --http-user=$JENKINS_USER --http-password=$JENKINS_PASSWORD http://$JENKINS_HOST/job/$JENKINS_JOB/build?token=TOKEN
fi

exit 0

Посмотрите на эту статью http://blogsyntagma.blogspot.com.ar/2012/04/hook-de-subversion-para-ejecutar-un-job.html (на испанском)

1 голос
/ 25 января 2011

Вот необходимые шаги:

  • Создайте пользователя SVN, который Хадсон сможет использовать для доступа к вашему хранилищу только для чтения.
  • Настройка Hudson для использования этого пользователя SVN при доступе к хранилищу
  • Создать новое задание для использования репозитория по указанному адресу (т. Е. Определенной ветке)
  • Сконфигурируйте свою работу, чтобы опросить хранилище, по крайней мере, один раз в минуту для любых изменений
  • Настройте свою работу, чтобы построить то, что требуется
  • Настройка работы для отправки электронного письма при сбое сборки

Я бы рекомендовал всем разработчикам по электронной почте уведомлять их о нестабильной сборке, а не только о виновнике. Это не только обеспечивает большую наглядность, но и побуждает виновника к немедленному решению проблемы или иным образом принимает отчитывание от своих коллег-разработчиков. Поверь мне, это эффективно.

0 голосов
/ 14 января 2019

Вот как я получил Jenkins 2.157, чтобы начать сборку после фиксации в репозитории SVN.

1.Разрешить доступ на чтение в Jenkins

Используя веб-интерфейс Jenkins, перейдите на Manage Jenkins -> Configure Global Security и установите флажок Allow anonymous read access:

allow anonymous read access screenshot

Если вы пропустите этот шаг, вы получите следующий ответ при попытке запустить сборку с использованием HTTP-запроса (описанного в третьем шаге):

Authentication required
<!--
You are authenticated as: anonymous
Groups that you are in:

Permission you need to have (but didn't): hudson.model.Hudson.Read
... which is implied by: hudson.security.Permission.GenericRead
... which is implied by: hudson.model.Hudson.Administer
-->

2.Сконфигурируйте триггер сборки

Все еще в веб-интерфейсе Jenkins, перейдите к заданию на сборку и определите, что вы хотите запустить сборку с помощью скрипта (это будет ловушка фиксации SVN на следующем шаге):

configure build trigger

3.Создайте post-commit hook

Наконец, перейдите в каталог hooks вашего репозитория и добавьте сценарий оболочки с именем post-commit (имя важно, иначе SVN не выполнит его после фиксации):

#!/bin/sh

# Name of the Jenkins build job
yourJob="your_job"

# You defined this in Jenkins' build job
build_token="yourSecretToken"

jenkins_address_with_port="localhost:8090"

curl $jenkins_address_with_port/job/$yourJob/build?token="$build_token"

Сделайте скрипт исполняемым: chmod +x post-commit.


Вот расширенная версия post-commit, которая регистрирует данные о коммите, такие как автор коммита.

#!/bin/sh

# The path to this repository
repo_path="$1"
# The number of the revision just committed
rev="$2"
# The name of the transaction that has become rev
transaction_name="$3"

# See http://svnbook.red-bean.com/en/1.7/svn.ref.svnlook.c.author.html
commit_author="$(svnlook author --revision $rev $repo_path)"
# The UUID of the repository, something like e3b3abdb-82c2-419e-a100-60b1d0727d12
repo_uuid=$(svnlook uuid $repo_path)

# Which files were changed, added, or deleted. For example:
# U   src/main/java/com/bullbytes/MyProgram.java
what_has_changed=$(svnlook changed --revision $rev $repo_path)

log_file=/tmp/post_commit.log

echo "Post-commit hook of revision $rev committed by $commit_author to repo at $repo_path with ID $repo_uuid was run on $(date). Transaction name: $transaction_name. User $(whoami) executed this script. This has changed: $what_has_changed" >> $log_file

# Name of the Jenkins build job
yourJob="your_job"

# You defined this in Jenkins' build job
build_token="yourSecretToken"

jenkins_address_with_port="localhost:8090"

curl $jenkins_address_with_port/job/$yourJob/build?token="$build_token"

Чтобы узнать больше о хуках фиксации, перейдите к документам .

...