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

Bla*_*dez 57 jenkins

我正在与jenkins合作,我希望在svn存储库发生更改时运行maven目标.我用我当前的配置附上了一张照片.

我知道每5分钟检查一次存储库很疯狂.我想只在有新的变化时运行它,但我找不到方法.无论如何,它不是检查存储库.我究竟做错了什么??

提前致谢在此输入图像描述

Ash*_*eze 96

我相信这些天的最佳实践是H/5 * * * *,每5分钟就有一个哈希因子,以避免所有工作在同一时间开始.

  • 事实上,詹金斯(两年后)现在会抛出以下警告:使用'H/5****'而不是'*/5****'来均匀分散负载. (6认同)
  • 是的,使用 H/5 * * * * 是避免错误“使用 'H/5 * * * *' 而不是 '*/5 * * * * 均匀分散负载”的最佳实践 (2认同)

小智 68

我认为你的cron不正确.根据您的描述,您可能需要将cron计划更改为

*/5 * * * *
Run Code Online (Sandbox Code Playgroud)

您在日程安排中的内容现在意味着它将在每小时的5点过去调查SCM.

  • 当错误时,为什么会有这么多的赞成?值"*/5"是"0-59/5"的等效值,即每小时12x. (4认同)

小智 8

这是一个老问题,我知道。但是,据我所知,它缺少正确的答案。

这里的实际/最佳工作流程是结合 SVN 的 post-commit 钩子,因此它仅在发出实际提交后触发 Jenkins 作业,而不是在任何其他情况下。这样您就可以避免对 SCM 系统进行不必要的轮询。

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

如果我在 corp 的 SVN 服务器中进行设置,我使用以下(审查)脚本作为 subversion 服务器端的提交后挂钩:

#!/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
Run Code Online (Sandbox Code Playgroud)