我正在与 jenkins 合作,当 svn 存储库发生更改时,我想运行 maven 目标。我附上了一张我当前配置的图片。
我知道每 5 分钟检查一次存储库很疯狂。我只想在有新变化时运行它,但我找不到方法。无论如何,它没有检查存储库。我究竟做错了什么??
提前致谢
我正在与 jenkins 合作,当 svn 存储库发生更改时,我想运行 maven 目标。我附上了一张我当前配置的图片。
我知道每 5 分钟检查一次存储库很疯狂。我只想在有新变化时运行它,但我找不到方法。无论如何,它没有检查存储库。我究竟做错了什么??
提前致谢
我相信这些天的最佳做法是H/5 * * * *
,这意味着每 5 分钟使用一个散列因子,以避免所有工作在完全相同的时间开始。
我认为您的 cron 不正确。根据您的描述,您可能需要将 cron 计划更改为
*/5 * * * *
您现在在日程表中输入的内容意味着它将在每小时 5 点轮询 SCM。
这是一个老问题,我知道。但是,据我说,它缺少正确的答案。
此处的实际/最佳工作流程将包含 SVN 的提交后挂钩,因此它仅在发出实际提交后触发 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