在Hudson中使用实际的分支头修订号

时间:2013-04-26 20:42:39

标签: python svn jenkins hudson

我们在SVN中有多个分支,并使用Hudson CI作业来维护我们的构建。我们使用SVN修订号作为我们的应用程序版本号的一部分。问题是,当一个Hudson工作检查出一个brach的HEAD时,它正在获得SVN的HEAD号码,而不是最后提交的那个brach的修订版。我知道,SVN在全球范围内保留了修订号,但是我们希望在我们的版本中反映最后提交的特定数字。

有没有办法使用python脚本获取brach的最后一个提交的修订号,以便我可以使用该修订号检查该分支? 或者更好,如果有办法在哈德森本身做到这一点?

感谢。

2 个答案:

答案 0 :(得分:1)

使用python获取路径的最后一次提交修订:

from subprocess import check_output as run # >=2.7

path = './'
cmd = ['svn', '--username', XXXX, '--password', XXXX, '--non-interactive', 'info', path]
out = run(cmd).splitlines()
out = (i.split(':', 1) for i in out if i)
info = {k:v.strip() for k,v in out}

# you can access  the other svn info fields in a similar manner
rev = info['Last Changed Rev']

with open('.last-svn-commit', 'w') as fh:
    fh.write(rev)

我不认为subversion scm插件可以为您提供所需的信息(仅导出SVN_URLSVN_REVISION)。请注意,查看“最后更改的版本”和“最后修改版本”之间没有任何区别。和HEAD修订版 - 它们都引用了分支中的相同内容。

您可能需要考虑为每个分支使用新作业。这样,触发构建的提交将是“最后更改的Rev”。 (除非你自己触发它)。您可以通过克隆中继作业和更改存储库URL来手动执行此操作,也可以使用jenkins-autojobs之类的工具自动执行此操作。

答案 1 :(得分:0)

svn info以外,您还可以使用svn log -q -l 1 URLsvn ls -v --depth empty URL