Python 如何避免在源代码中保留版本号?
到目前为止,我们将python源代码的版本号保留在setup.py中 每次成功运行ci后,此版本都会增加 这意味着中央图书馆的版本每天增加几倍 由于版本号存储在git repo中的一个文件中,因此版本号的每一次增加都是一次新的提交 这意味着大约50%的提交不是由人类完成的,而是由CI完成的 我有种感觉,我们走错了方向。在ci中保留版本号可能不是一个好的解决方案 我们怎样才能避免“无用”的CI提交,它只会增加版本号 如何避免在源代码中保留版本号 更新 几年来,我们一直没有人工发布。我们没有像MAJOR.MINOR这样的版本控制方案。我们过去从未错过这一点。我知道这并不适用于所有环境。但它适用于我目前的环境 我们有一个版本号,看起来像这样:YEAR.MONTH.X 这意味着通过CI的每个提交都是一个新版本 阅读答案后,我意识到:我需要问自己:我有版本号吗?我想没有。我有一个版本号。在这方面不需要更多Python 如何避免在源代码中保留版本号?,python,git,continuous-integration,Python,Git,Continuous Integration,到目前为止,我们将python源代码的版本号保留在setup.py中 每次成功运行ci后,此版本都会增加 这意味着中央图书馆的版本每天增加几倍 由于版本号存储在git repo中的一个文件中,因此版本号的每一次增加都是一次新的提交 这意味着大约50%的提交不是由人类完成的,而是由CI完成的 我有种感觉,我们走错了方向。在ci中保留版本号可能不是一个好的解决方案 我们怎样才能避免“无用”的CI提交,它只会增加版本号 如何避免在源代码中保留版本号 更新 几年来,我们一直没有人工发布。我们没有像MAJ
(谢谢你的支持。在问这个问题之前,我确信这个问题会结束,因为人们会认为它“不清楚”或“太广泛”)我认为你应该使用git flow。创建一个主分支和一个开发分支。每次CI检查开发版本时,版本号保持不变。每次创建版本(例如,合并开发到主版本)时,都可以通过CI增加版本号 或者我遗漏了什么,但在我看来,没有理由每次运行ci时都增加版本号
因此,总而言之,您最好考虑何时“发布”对新版本的更改 在源代码中保留版本号是一种常见的做法,这没有什么错 您需要将CI过程与常规构建、发布发布和发布部署分开 常规构建:每天甚至在每次提交后运行,可以包括静态代码分析和自动测试,检查代码是否可以构建。常规版本不应更改版本号 发布发布:只能通过发布管理器的显式手动操作触发。
触发操作可以是使用新版本号标记提交、将新合并到发布分支中,或者只是更改保存在特殊文件中的版本号的提交(例如,
pom.xml
)。例如,请参考git流。Release publishing分配新版本号(自动或手动),必要时将其提交到源代码中,使用新版本构建二进制软件包并将其上载到二进制软件包存储库(例如Nexus、devpi、本地APT存储库、Docker注册表等) 发布部署:另一个手动触发的操作,它从包存储库获取一个就绪的二进制包,并将其安装到目标环境(开发人员、QA/UAT/staging、canary部署的部分生产或整个生产环境)。前提: 我假设这些是讨论解决方案的前提
git filter branch
重写现有的git repo历史记录,标记以前的版本提交以保持一致性,删除并停止跟踪版本号源cile,然后删除这些CI提交关于你的第一个问题: 我们怎样才能避免“无用”的CI提交,它只会增加 版本号 请确认持续集成(CI)是一种开发实践,它通过自动构建来验证每个
签入
,允许团队尽早发现问题
话虽如此,我想在此阐明:
- 从实践来看:每次提交都应该建立在集成的基础上 机器
- 在“如何执行”下:CI服务器监视存储库并在发生更改时检查更改
从CI服务器提交
基于您的CI机制,我希望您应该/必须能够控制它,我们使用的每个工具几乎都有处理方法。(例如:bitbucket中的Webhook、版本插件等)
因此,确保只有在新提交后,我们才有新版本。
现在,如果您正在考虑那些常规的夜间集成构建,请阅读以下内容:
许多组织按照定时计划进行定期构建,例如每天晚上这与持续构建不同,对于持续集成来说是不够的。持续集成的全部要点是尽快发现问题。夜间构建意味着bug隐藏在内部
It is a common practice to keep a version number in the source code, there is nothing wrong in that.