我需要设置哪些插件和插件功能才能让我的Jenkins作业在任何时候将代码提交给SVN项目时触发构建?
我已经安装了标准SVN插件以及SVN标记插件,但我没有看到任何允许触发器配置的新功能。
有两种方法可以解决这个问题:
我推荐第一个选项,因为它易于实现。在构建过程中成熟后,切换到第二个。
SVN标记功能不是轮询的一部分,它是将源代码的当前“头”提升为标记,对构建进行快照的一部分。这允许您将Jenkins buid#32称为SVN标记/标记/ build-32(或类似的东西)。
我使用Python创建了一个带有一些bash的工具来触发Jenkins构建。基本上,当提交命中SVN服务器时,您必须从提交后收集这两个值:
REPOS="$1"
REV="$2"
然后使用“svnlook dirs-changed $ 1 -r $ 2”来获取刚刚提交的路径。然后,您可以检查要构建的存储库。想象一下,你有数十万个项目。你无法检查整个存储库,对吗?
你可以看看my script from GitHub。
您只需要一个插件即Subversion插件。
然后简单地进入Jenkins→job_name→Build Trigger部分→(i)远程触发构建(即从脚本)认证令牌:Token_name
转到SVN服务器的hooks目录,然后触发以下命令:
cp post-commit.tmpl post-commit
chmod 777 post-commit
chown -R www-data:www-data post-commit
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
您可以使用post-commit钩子。
将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%
其中Test =工作的名称
echo
用于查看值,您还可以在最后添加exit 2
以了解问题以及提交后挂钩脚本是否正在运行。