我们在 SVN 中有多个分支,并使用 Hudson CI 作业来维护我们的构建。我们使用 SVN 修订号作为应用程序版本号的一部分。问题是,当 Hudson 作业检查分支的 HEAD 时,它获取的是 SVN 的 HEAD 编号,而不是该分支的最后提交的修订版本。我知道,SVN 在全局范围内维护修订号,但我们希望反射(reflect)我们版本中特定分支的最后提交编号。
有没有办法使用 python 脚本获取分支的最后提交的修订号,以便我可以使用该修订号 checkout 该分支? 或者如果有办法在 hudson 本身做到这一点更好?
谢谢。
最佳答案
使用 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_URL
和 SVN_REVISION
)。请记住,检查“上次更改的版本”和 HEAD 版本之间没有区别 - 它们都引用您分支中的相同内容。
您可能需要考虑为您拥有的每个分支使用一个新作业。这样,触发构建的提交将是“最后更改的版本”(除非您自己触发它)。您可以通过克隆主干作业并更改存储库 URL 来手动执行此操作,也可以使用类似 jenkins-autojobs 的工具。自动完成。
关于python - 在 Hudson 中使用实际的分支头修订号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244894/