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

标签 python svn jenkins hudson

我们在 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_URLSVN_REVISION)。请记住,检查“上次更改的版本”和 HEAD 版本之间没有区别 - 它们都引用您分支中的相同内容。

您可能需要考虑为您拥有的每个分支使用一个新作业。这样,触发构建的提交将是“最后更改的版本”(除非您自己触发它)。您可以通过克隆主干作业并更改存储库 URL 来手动执行此操作,也可以使用类似 jenkins-autojobs 的工具。自动完成。

关于python - 在 Hudson 中使用实际的分支头修订号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244894/

相关文章:

svn - 如何使用 git-svn 将根植于不同目录的 svn 分支导入到 git 中?

apache - 让apache遵循SVN认证

git - 如何远程触发 Jenkins 多分支管道项目构建?

python - PyPI 如何确定包的最新版本是什么?

python - Wagtail ModelAdmin 出现 list_filter 错误 : FieldDoesNotExist: Region has no field named 'p'

python - 将 WRDS SQL 查询保存到 python 中的文件中

python - 使用 Selenium 选择元素属性的值

c# - 将 Tortoise SVN 修订号链接到程序集版本

c++ - 使用CPPCHECK的Red Hat Enterprise Linux(RHEL)上的C++宏问题

jenkins - 如何访问参数化构建中的参数?