74

Вопрос по continuous-integration, jenkins, svn – Дженкинс CI: Как вызвать сборки на SVN коммит

Какие плагины и функции плагинов мне нужно установить, чтобы моя задача Jenkins запускала сборку в любое время, когда код SVN добавляется в проект?

Я установил как стандартный плагин SVN, так и плагин тегирования SVN, но я не вижу никаких новых функций, позволяющих конфигурировать триггер.

  • 81

    Есть два способа сделать это:

    Первоначально я рекомендую первый вариант из-за его простоты реализации. Как только вы достигнете зрелости в своих процессах сборки, переключитесь на второй.

    Poll the repository to see if changes occurred. This might "skip" a commit if two commits come in within the same polling interval. Description of how to do so here, note the fourth screenshot where you configure on the job a "build trigger" based on polling the repository (with a crontab-like configuration).

    Configure your repository to have a post-commit hook which notifies Jenkins that a build needs to start. Description of how to do so here, in the section "post-commit hooks"

    Функция SVN Tag не является частью опроса, она является частью продвижения текущей «головы» исходного кода в тег, чтобы сделать снимок сборки. Это позволяет вам ссылаться на buid # 32 Jenkins как SVN tag / tags / build-32 (или что-то подобное).

  • -1

    Вы можете использовать хук после фиксации.

    Поместите скрипт перехвата пост-фиксации вhooks папку, создатьwget_folder в вашем диске C: \ и поместитеwget.exe файл в этой папке. Добавьте следующий код в файл с именемpost-commit.bat

    SET REPOS=%1   
    SET REV=%2
    
    FOR /f "tokens=*" %%a IN (  
    'svnlook uuid %REPOS%'  
    ) DO (  
    SET UUID=%%a  
    )  
    
    FOR /f "tokens=*" %%b IN (  
    'svnlook changed --revision %REV% %REPOS%'  
    ) DO (  
    SET POST=%%b   
    )
    
    echo %REPOS% ----- 1>&2
    
    echo %REV% -- 1>&2
    
    echo %UUID% --1>&2
    
    echo %POST% --1>&2
    
    C:\wget_folder\wget ^   
        --header="Content-Type:text/plain" ^   
        --post-data="%POST%" ^   
        --output-document="-" ^   
        --timeout=2 ^     
        http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%    
    

    где Test = название работы

    echo используется, чтобы увидеть значение, и вы также можете добавитьexit 2 в конце, чтобы узнать о проблеме и о том, запущен ли скрипт ловушки после фиксации или нет.

  • 1

    Вам нужно только один плагин, который является плагином Subversion.

    Затем просто перейдите в Jenkins & # x2192; job_name & # x2192;Build Trigger раздел & # x2192; (i) Удаленная сборка триггера (т. е. из сценариев)     Токен аутентификации: Token_name

    Перейдите в каталог ловушек сервера SVN, а затем после запуска выполните следующие команды:

    cp post-commit.tmpl post-commit chmod 777 post-commit chown -R www-data:www-data post-commit

    vi post-commit

    Note: All lines should be commented Add the below line at last

    Синтаксис (для пользователей Linux):

    /usr/bin/curl http://username:[email protected]:8081/job/job_name/build?token=Token_name
    

    Синтаксис (для пользователей Windows):

    C:/curl_for_win/curl http://username:[email protected]:8081/job/job_name/build?token=Token_name
    

  • 0

    Я создал инструмент

    использующий Python с некоторой bash для запуска сборки Jenkins. По сути, вы должны собрать эти два значения из post-commit, когда коммит попадает на сервер SVN:

    REPOS="$1"
    REV="$2"
    

    Затем вы используете & quot; svnlook dirs-change $ 1 -r $ 2 & quot; чтобы получить путь, который только что совершил. Затем вы можете проверить, какой репозиторий вы хотите построить. Представьте, что у вас есть сотни тысяч проектов. Вы не можете проверить весь репозиторий, верно?

    Вы можете проверитьмой скрипт от GitHub.