我对Jenkins和CI一般都很陌生。
我们当前的SVN设置包括一个包含各种项目的大型存储库,这些项目在子目录中组织,我们希望每当每个项目的特定文件是自动开始构建(并在将来测试)致力于SVN回购。
我目前在詹金斯的工作设置/工作流程是这样的。
这一切都正常,但从提交SVN到Jenkins更新本地副本的时刻有一分钟的延迟,另一分钟让FSTrigger插件扫描“触发器文件”中的更改
我刚刚在SVN中实现了一个post-commit钩子来解决第一个延迟,所以现在不再对SVN repo进行轮询。
现在我真的想摆脱每分钟FSTrigger插件轮询引起的第二次延迟(轮询是,顺便说一下,这是一种糟糕的技术)。
根据刚刚更新的文件,有没有办法让第一个作业“调用/触发”其他文件,因为我的触发条件是一个特定的文件被提交(更新)到我的每个项目的SVN仓库?
答案 0 :(得分:2)
你想要与FSTrigger插件分手。正如你所说,民意调查很糟糕。
您希望在提交后挂钩中使用一些逻辑来查看该提交中更改的路径,并触发启动相应构建的请求。
我不再使用jenkins或svn,所以我无法进行真正的测试。类似的东西:
svnlook changed -t "$TXN" "$REPOS
可以让你改变路径。
然后向jenkins发出请求,根据您在svnlook
输出中找到的路径来构建作业:
curl --user $JENKINS_USER:$JENKINS_API_TOKEN http://jenkins/job/build-name/build
OP注意:这是我在post-commit hook中实现它的方式:
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
效果很好!