Jenkins - 配置Jenkins轮询SCM中的更改

65

我正在使用Jenkins,希望在svn存储库发生更改时运行Maven目标。 我已经附上了我的当前配置图片。

我知道每5分钟检查一次存储库是疯狂的。 我想仅在有新更改时运行它,但我找不到方法。 无论如何,它没有检查存储库。 我做错了什么?

输入图像描述

3个回答

111

我认为现在最佳实践是H/5 * * * *,这意味着每5分钟运行一次任务,并使用哈希因子避免所有作业同时开始。


8
实际上,两年后的Jenkins现在将会抛出以下警告:“通过使用'H/5 * * * '而不是'/5 * * * *'来平均分配负载。” - msanford
2
是的,使用"H/5 * * * "是避免出现错误的最佳实践,以均匀分配负载,而不是使用"/5 * * * *"。 - Ripunjay Godhani

79

我认为你的定时任务设置不正确。根据你所描述的情况,你可能需要更改定时任务的计划表。

*/5 * * * *

现在你在日程表中设置的意思是每小时的5分会轮询SCM。


我还有另外一些问题,也许你可以帮我:当我部署项目时,认证方面出现了问题。我不知道在哪里写凭据。有什么线索吗?谢谢。 - Blanca Hdez
这是一个特定于Web服务器的问题,我真的无法回答。 - user454043
嗨,Blanca,你可以检查jenkins用户的权限(也许需要另一个用户运行)。在Windows上运行services.msc,查找jenkins项目,右键单击,属性-> 登录。 - Edgar Villegas Alvarado
这样微小的变化会带来巨大的不同!(在数字5前添加*/,以每5分钟一次而不是每小时5分开始...) - ganders
4
为什么这个错误的东西会得到这么多点赞?"*/5"的值相当于"0-59/5",意思是每小时12次。 - djangofan

8

这是一个老问题,我知道。但是,根据我的经验,它缺乏适当的答案。

实际/最佳的工作流程应该是将SVN的后提交挂钩合并,以便仅在实际提交时触发Jenkins作业,而不是在其他任何情况下触发。这样可以避免对SCM系统进行不必要的轮询。

您可能会发现以下链接有趣:

对于我在公司的SVN服务器上设置的情况,我使用以下(已审查的)脚本作为提交后挂钩在子版本服务器端:

#!/bin/sh

# POST-COMMIT HOOK

REPOS="$1"
REV="$2"
#TXN_NAME="$3"
LOGFILE=/var/log/xxx/svn/xxx.post-commit.log

MSG=$(svnlook pg --revprop $REPOS svn:log -r$REV)
JENK="http://jenkins.xxx.com:8080/job/xxx/job/xxx/buildWithParameters?token=xxx&username=xxx&cause=xxx+r$REV"
JENKtest="http://jenkins.xxx.com:8080/view/all/job/xxx/job/xxxx/buildWithParameters?token=xxx&username=xxx&cause=xxx+r$REV"

echo post-commit $* >> $LOGFILE 2>&1

# trigger Jenkins job - xxx
svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -qP "branches/xxx/xxx/Source"
if test 0 -eq $? ; then
        echo $(date) - $REPOS - $REV: >> $LOGFILE
        svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -P "branches/xxx/xxx/Source" >> $LOGFILE 2>&1
        echo logmsg: $MSG >> $LOGFILE 2>&1
        echo curl -qs $JENK >> $LOGFILE 2>&1
        curl -qs $JENK >> $LOGFILE 2>&1
        echo -------- >> $LOGFILE
fi

# trigger Jenkins job - xxxx
svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -qP "branches/xxx_TEST"
if test 0 -eq $? ; then
        echo $(date) - $REPOS - $REV: >> $LOGFILE
        svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -P "branches/xxx_TEST" >> $LOGFILE 2>&1
        echo logmsg: $MSG >> $LOGFILE 2>&1
        echo curl -qs $JENKtest >> $LOGFILE 2>&1
        curl -qs $JENKtest >> $LOGFILE 2>&1
        echo -------- >> $LOGFILE
fi

exit 0

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