Jenkins CI:如何触发基于SVN提交的构建


Answers:


86

有两种解决方法:

由于它易于实施,因此我最初建议使用第一种方法。一旦您的构建过程成熟,请切换到第二个。

  1. 轮询存储库以查看是否发生了更改。如果在同一轮询间隔内有两次提交,则可能“跳过”提交。 在此处说明如何执行此操作,请注意第四个屏幕截图,在该屏幕快照中,您将根据轮询存储库(使用类似crontab的配置)在作业上配置“生成触发器”。

  2. 将您的存储库配置为具有提交后挂接,该挂接通知Jenkins构建需要开始。 在此处的“提交后挂钩”部分中,说明如何执行此操作

SVN标记功能不是轮询的一部分,它是将源代码的当前“头”提升为标记以对构建进行快照的一部分。这使您可以将Jenkins buid#32称为SVN标签/ tags / build-32(或类似名称)。


提交后钩子摇滚。更快的响应时间,以及(大规模)您的CI系统不会因数百个变更日志请求而破坏源存储库。
EricMinick 2012年

5
@EricMinick他们很棒,但是如果您在短时间内收到很多小的提交,有时它们可​​以融化CI服务器。课程全都是马,如果不分析您的开发流程当前如何运作,很难知道哪种方法是合适的。
Edwin Buck

1
@EdwinBuck:您是否知道是否可以将Jenkins配置为仅构建选择性提交?我将说明,我有一个tortoiseSVN和一个Jenkins项目,该项目一直在轮询存储库。现在,如果我希望所做的提交不触发詹金斯,是否有办法做到这一点?
SandBag_1996'1

@UnderDog如果您已经成熟到在Maven中具有提交后触发器的地步,那么我更喜欢一种解决方案,该解决方案在提交后触发器中查找特殊的“关键字”,并在发现它们后选择不告诉詹金斯人服务器以启动新版本。例如,如果在提交的第一行中提供了“ ^ DONTBUILD-。*”,则可以将其用作“ dont build”标志。
Edwin Buck

@mxdsp更新了链接。它不像旧的wandisco那样漂亮,但是可以完成工作。谢谢!
Edwin Buck

2

您只需要一个插件,即Subversion插件。

然后,简单地进入Jenkins→job_name→构建触发器部分→(i)远程(即从脚本)触发构建身份验证令牌:Token_name

转到SVN服务器的hooks目录,然后启动以下命令:

  1. cp post-commit.tmpl post-commit
  2. chmod 777 post-commit
  3. chown -R www-data:www-data post-commit
  4. vi post-commit

    注意:所有行都应加注解 最后添加以下行

语法(对于Linux用户):

/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

语法(对于Windows用户):

C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

这个答案或多或少与这个答案相同。
彼得·莫滕森

1

我使用Python和一些bash制作了一个工具来触发Jenkins构建。基本上,必须在提交击中SVN服务器时从提交后收集以下两个值:

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

然后,使用“ svnlook dirs-changed $ 1 -r $ 2”来获取刚刚提交的路径。然后,您可以从中检查要构建的存储库。假设您有数十万个项目。您无法检查整个存储库,对吗?

您可以从GitHub签出我的脚本


-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在末尾添加以了解问题以及提交后的钩子脚本是否正在运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.