如何基于SVN repo上更新的特定文件触发Jenkins作业上的构建?

如何基于SVN repo上更新的特定文件触发Jenkins作业上的构建?,svn,jenkins,continuous-integration,Svn,Jenkins,Continuous Integration,一般来说,我对詹金斯和CI都是新手 我们当前的SVN设置是由一个包含各种项目的大型存储库组成的,存储在子目录中,我们希望在每个项目的特定文件提交给SVN repo时自动开始构建(并在将来进行测试) 我目前在詹金斯的工作设置/工作流程是这样的 一个每分钟轮询SVN并更新本地源副本的主作业 N个作业(每个项目一个作业),使用FSTrigger plugin每分钟轮询本地源副本,查看特定文件中的更改(每个项目明显不同),如果发现更改,则触发特定项目的生成 这一切都正常工作,但从提交给SVN的那一刻

一般来说,我对詹金斯和CI都是新手

我们当前的SVN设置是由一个包含各种项目的大型存储库组成的,存储在子目录中,我们希望在每个项目的特定文件提交给SVN repo时自动开始构建(并在将来进行测试)

我目前在詹金斯的工作设置/工作流程是这样的

  • 一个每分钟轮询SVN并更新本地源副本的主作业
  • N个作业(每个项目一个作业),使用FSTrigger plugin每分钟轮询本地源副本,查看特定文件中的更改(每个项目明显不同),如果发现更改,则触发特定项目的生成
这一切都正常工作,但从提交给SVN的那一刻起,到Jenkins更新其本地副本,大约有一分钟的延迟,还有一分钟让FSTrigger插件扫描“触发器文件”中的更改

我刚刚在SVN中实现了一个post-commit钩子来解决第一个延迟,所以现在不再对SVN-repo进行轮询

现在我真的想摆脱每分钟FSTrigger插件轮询造成的第二次延迟(顺便说一句,轮询是一种糟糕的技术)


如果我的触发条件是每个项目都有一个特定的文件提交(更新)到SVN repo,那么有没有办法让第一个作业根据刚刚更新的文件“调用/触发”其他作业?

你想和FSTrigger插件分手吗。正如你提到的,投票很糟糕

您希望在提交后钩子中有一些逻辑,可以查看在提交中更改的路径,并发出启动相应构建的请求

我不再使用jenkins或svn,所以我无法真正测试。比如:

svnlook changed-t“$TXN”$REPOS
应该可以让您更改路径

然后向jenkins发出请求,根据在
svnlook
输出中找到的路径构建作业:

curl——用户$JENKINS\u用户:$JENKINS\u API\u令牌http://jenkins/job/build-name/build


OP中的注意事项:这是我在post-commit钩子中实现它的方式:

REPOS="$1"
REV="$2"
svnlook changed --revision $REV $REPOS |
  #logic to filter the trigger file and to create the job name from it |
  while read -r JOBNAME ; do
    /usr/bin/wget \
      --output-document "-" \
      --timeout=30 \
      --tries=1 \
      http://JENKINS_SERVER/job/$JOBNAME/build
done
它工作得很好