79

我需要设置哪些插件和插件功能才能让我的 Jenkins 工作在任何时候将代码提交到 SVN 项目时触发构建?

我已经安装了标准 SVN 插件和 SVN 标记插件,但我没有看到任何允许配置触发器的新功能。

4

4 回答 4

86

有两种方法可以解决这个问题:

我最初推荐第一个选项,因为它易于实施。一旦你的构建过程成熟,切换到第二个。

  1. 轮询存储库以查看是否发生更改。如果两个提交在同一个轮询间隔内出现,这可能会“跳过”一个提交。 关于如何在此处执行此操作的说明,请注意第四个屏幕截图,其中您在作业中配置了基于轮询存储库的“构建触发器”(使用类似 crontab 的配置)。

  2. 将您的存储库配置为具有一个提交后挂钩,该挂钩通知 Jenkins 需要开始构建。 此处插件的描述,在“提交后挂钩”部分

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

于 2012-04-04T15:32:48.850 回答
2

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

然后简单地进入 Jenkins → job_name → Build Trigger部分 → (i) Trigger build remote (ie, from scripts) Authentication token: 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
于 2017-10-18T06:31:13.587 回答
1

我使用带有一些 bash 的 Python 制作了一个工具来触发 Jenkins 构建。基本上,当提交到达 SVN 服务器时,您必须从提交后收集这两个值:

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

然后你使用“svnlook dirs-changed $1 -r $2”来获取刚刚提交的路径。然后,您可以从中检查要构建的存储库。想象一下,您有数十万个项目。你不能检查整个存储库,对吧?

你可以从 GitHub 查看我的脚本

于 2015-08-19T14:50:44.850 回答
-1

您可以使用提交后挂钩。

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

于 2016-04-01T11:56:04.207 回答