2012-04-04 437 views
64

我需要设置什么插件和插件功能才能让我的Jenkins作业触发构建任何时候将代码提交给SVN项目?我已经安装了标准的SVN插件以及SVN标签插件,但没有看到任何允许进行触发器配置的新功能。Jenkins CI:如何在SVN commit上触发构建

+0

可能重复的HTTP ://sackoverflow.com/questions/4792466/trigger-hudson-build-when-svn-commit) – highlycaffeinated 2012-04-04 15:28:49

回答

71

有两种方法去了解这一点:

我建议第一个选项最初,由于其易于实施。一旦你在构建过程中成熟,切换到第二个。

  1. 民意调查的资料库,看是否发生了变化。如果两个提交在同一个轮询间隔内进入,这可能会“跳过”一个提交。 Description of how to do so here,请注意第四个屏幕截图,您可以在该作业上配置基于轮询存储库(使用类似crontab的配置)的“构建触发器”。

  2. 配置您的存储库以具有通知Jenkins生成需要启动的post-commit挂钩。 Description of how to do so here,在部分“提交后钩”

的SVN标签特征不是轮询的一部分,它是促进源代码的当前“头”标签的一部分,进行快照的建立。这允许您将Jenkins buid#32称为SVN标签/标签/ build-32(或类似的东西)。

+0

后提交钩岩石。更快的响应时间,并且(按比例)您的CI系统不会用数百个更改日志请求压缩源回购。 – EricMinick 2012-04-05 15:22:30

+4

@EricMinick他们很棒,但有时他们可以融化CI服务器,如果你在很短的时间内得到很多小的提交。这些课程都是马匹,如果不分析你的开发过程当前如何运作,很难知道哪种方法是有利的。 – 2012-04-05 15:27:27

+0

@EdwinBuck:你知道有没有办法将Jenkins配置为仅构建选择性提交?我会解释一下,我有一个tortoiseSVN和一个Jenkins项目,它继续轮询存储库。现在,如果我希望我所做的承诺不应触发Jenkins,是否有办法做到这一点? – 2015-01-05 20:04:35

0

我做了一个工具,使用Python与一些bash触发jenkins构建。基本上,你必须收集来自这两个值的post-commit在commit打SVN服务器:

REPOS = “$ 1” REV = “$ 2”

然后使用“svnlook的迪尔斯 - 改变$ 1 - [$ 2 “以获得刚刚承诺的道路。然后,你可以检查你想建立的存储库。想象一下你有几十万个项目。你不能检查整个存储库?

您可以从github

检查出我的剧本我写这个剧本,因为我刚刚学习Python,和现在仍在使用它。我计划改进它,但新项目和新事物一直支持着我。大家对Python有很好的了解肯定有更好的内置工具。如果任何人都可以分享,会喜欢拥有它。

-1

你可以使用post-commit钩子。

将提交后挂钩脚本放入hooks文件夹中,在C:\驱动器中创建一个wget_folder,并将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%  

在作业

echo的测试=名称用来看到价值,你也可以在末尾添加exit 2了解的问题, post-commit钩子脚本是否正在运行。

0

你们会推荐使用GitHub代替SVN来触发构建吗? 其实我只是知道SVN,但我想知道为什么这么多人倾向于使用GitHub。

0

你只需要一个插件,这是一个颠覆插件。 然后 简单地说,走进jenkins-> job_name->构建触发部分 - > (我)触发建立远程(即从脚本) 身份验证令牌:-Token_name

然后去SVN服务器挂钩目录,然后起火后以下命令: - (a)cp post-commit.tmpl post-commit (b)chmod 777 post-commit (c)chown -R www-data:www-data post-commit (d)vi post-提交 说明:所有行都应该注释 最后加上一行 synta X(为Linux用户): - 在/ usr /斌/卷曲http://username:[email protected]:8081/job/job_name/build?token=Token_name

语法(视窗用户): - C:/ curl_for_win /卷曲http://username:[email protected]:8081/job/job_name/build?token=Token_name

[触发哈德森生成时使用svn commit](的