如何在代码提交后立即触发Jenkins构建

14

当代码提交后,如何在Jenkins中触发构建?

  1. Jenkins已经安装并且可以手动触发构建。
  2. 以下是SVN版本详细信息:

    • TortoiseSVN 1.8.1,Build 24570 - 32位,2013/07/22 18:28:29
    • Subversion 1.8.1,-release
    • apr 1.4.8
    • apr-util 1.5.2
    • serf 1.3.0
    • OpenSSL 1.0.1e 11 Feb 2013
    • zlib 1.2.8
  3. Jenkins网址:"localhost:8080/job/TestProject/"

1个回答

17
为了让构建在代码提交后立即触发,您需要有某种方式通知Jenkins。
但是,您可以配置作业定期轮询SCM(在我的店里,我们每5分钟轮询一次Mercurial存储库)以获取新更改并进行构建。
为此,在“构建触发器”部分中,选中“轮询SCM”复选框,并在文本区域中填写cron表达式。对于每5分钟轮询,我们使用:
H/5 * * * *

请注意,我们曾经使用过
*/5 * * * *

但是将左侧的*替换为H可以让Jenkins避免同时轮询所有项目(它将每5分钟轮询一次,但不一定在0、5、10等分钟轮询)。
还可以通过选中远程触发构建并在文本框中指定一个标记来远程触发构建。然后从脚本到相关URL的简单联系将触发构建。
JENKINS_URL/job/JOB_NAME/build?token=TOKEN_NAME

(此选项可能需要一些特定的权限设置或一些特定的全局配置,因为似乎它对OP不可用。)

对于提交后钩子解决方案,请参阅Jenkins' Subversion Plugin documentation,下面是重要部分:

Jenkins can poll Subversion repositories for changes, and while this is reasonably efficient, this can only happen up to every once a minute, so you may still have to wait a full minute before Jenkins detects a change.

To reduce this delay, you can set up a post commit hook so the Subversion repository can notify Jenkins whenever a change is made to that repository. To do this, put the following script in your post-commit file (in the $REPOSITORY/hooks directory):

REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  --timeout=2 \
  http://server/subversion/${UUID}/notifyCommit?rev=$REV
(强烈建议阅读完整文档以了解配置信息或获得更强大的脚本。)

我也找不到“构建触发器”中的选项。以下是选项:
  1. 每当构建SNAPSHOT依赖项时构建
  2. 在其他项目构建后构建
  3. 定期构建
  4. 当另一个项目被推广时构建
  5. 轮询SCM
- user2077937
1
“Poll SCM”是我推荐的定期轮询SCM选项。缺少“远程触发构建”可能与您的Jenkins实例的全局配置有关。 - Gorkk
我对如何创建svn钩子毫无头绪,所以对此无能为力。然而,我在我的答案中添加了jenkins svn插件文档的链接,以及svn钩子创建文档的链接,这应该是你一个不错的起点。 - Gorkk
我的提交后批处理文件大致如下。 - user2077937
SET REPOS=%1 SET REV=%2 SET UUID=svnlook uuid %REPOS% C:/wget_for_win/wget
--header="Content-Type:text/plain;charset=UTF-8" --post-data="svnlook changed --revision %REV% %REPOS%" --output-document="-" --timeout=2 http://localhost:8080/jenkins/subversion/%UUID%/notifyCommit?rev=%REV%在 post-commit.bat 文件中,这个值应该是什么:"C:/wget_for_win/wget"。 而且在全局配置中,我找不到启用远程触发构建的选项。我会再次检查。
- user2077937
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接