通过使用需要两个步骤的解决方法,在 Jenkins 中描述的场景是可能的:
在我的设置中,JobA_trigger 会定期轮询 SCM。如果有变化,则通过 curl 触发 JobA 并提交当前日期时间²。这种“外部”触发是向 JobA 提交参数所必需的。
# JobA_trigger "execute shell"
curl ${JENKINS_URL}job/JobA/buildWithParameters?SVN_REVISION=`date +"%Y-%m-%d"`%20`date +"%H:%M:%S"`
# SVN_REVISION, example (decoded): "2012-11-07 12:56:50" ("%20" is url-encoded space)
JobA 本身是参数化的,并接受一个字符串参数“SVN_REVISION”。此外,我必须将 SVN-URL 更改为
# Outer brackets for usage of SVN revision dates³ - must be avoided if working on a revision-number.
https://svn.someaddress.com/trunk@{${SVN_REVISION}}
使用此解决方法,对于每个 scm-change,都有新运行的 JobA 排队,其中附加了相关的 svn-revision/dateTime 作为参数,并用作该作业正在测试的软件状态。
¹ https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
² 我决定使用 dateTime-bases 更新而不是基于修订的更新,因为我有 svn-externals,如果我要基于修订工作,每个都将更新为 HEAD。
³ http://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html#svn.tour.revs.dates