Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免在源代码中保留版本号?_Python_Git_Continuous Integration - Fatal编程技术网

Python 如何避免在源代码中保留版本号?

Python 如何避免在源代码中保留版本号?,python,git,continuous-integration,Python,Git,Continuous Integration,到目前为止,我们将python源代码的版本号保留在setup.py中 每次成功运行ci后,此版本都会增加 这意味着中央图书馆的版本每天增加几倍 由于版本号存储在git repo中的一个文件中,因此版本号的每一次增加都是一次新的提交 这意味着大约50%的提交不是由人类完成的,而是由CI完成的 我有种感觉,我们走错了方向。在ci中保留版本号可能不是一个好的解决方案 我们怎样才能避免“无用”的CI提交,它只会增加版本号 如何避免在源代码中保留版本号 更新 几年来,我们一直没有人工发布。我们没有像MAJ

到目前为止,我们将python源代码的版本号保留在setup.py中

每次成功运行ci后,此版本都会增加

这意味着中央图书馆的版本每天增加几倍

由于版本号存储在git repo中的一个文件中,因此版本号的每一次增加都是一次新的提交

这意味着大约50%的提交不是由人类完成的,而是由CI完成的

我有种感觉,我们走错了方向。在ci中保留版本号可能不是一个好的解决方案

我们怎样才能避免“无用”的CI提交,它只会增加版本号

如何避免在源代码中保留版本号

更新 几年来,我们一直没有人工发布。我们没有像MAJOR.MINOR这样的版本控制方案。我们过去从未错过这一点。我知道这并不适用于所有环境。但它适用于我目前的环境

我们有一个版本号,看起来像这样:YEAR.MONTH.X

这意味着通过CI的每个提交都是一个新版本

阅读答案后,我意识到:我需要问自己:我有版本号吗?我想没有。我有一个版本号。在这方面不需要更多


(谢谢你的支持。在问这个问题之前,我确信这个问题会结束,因为人们会认为它“不清楚”或“太广泛”)

我认为你应该使用git flow。创建一个主分支和一个开发分支。每次CI检查开发版本时,版本号保持不变。每次创建版本(例如,合并开发到主版本)时,都可以通过CI增加版本号

或者我遗漏了什么,但在我看来,没有理由每次运行ci时都增加版本号


因此,总而言之,您最好考虑何时“发布”对新版本的更改

在源代码中保留版本号是一种常见的做法,这没有什么错

您需要将CI过程与常规构建、发布发布和发布部署分开

常规构建:每天甚至在每次提交后运行,可以包括静态代码分析和自动测试,检查代码是否可以构建。常规版本不应更改版本号

发布发布:只能通过发布管理器的显式手动操作触发。
触发操作可以是使用新版本号标记提交、将新合并到发布分支中,或者只是更改保存在特殊文件中的版本号的提交(例如,
pom.xml
)。例如,请参考git流。
Release publishing分配新版本号(自动或手动),必要时将其提交到源代码中,使用新版本构建二进制软件包并将其上载到二进制软件包存储库(例如Nexus、devpi、本地APT存储库、Docker注册表等)

发布部署:另一个手动触发的操作,它从包存储库获取一个就绪的二进制包,并将其安装到目标环境(开发人员、QA/UAT/staging、canary部署的部分生产或整个生产环境)。

前提: 我假设这些是讨论解决方案的前提

  • 当前版本号保存在git跟踪的源文件中,但您可以将其删除
  • 没有人手动管理版本号,也没有人触发发布过程,其中包括:(a)增加版本号,(b)从源代码生成,(c)将生成的结果存储在某处。这些都由CI负责,并且应该保持这种方式
  • 解决方案:
  • CI只需标记通过CI检查的特定提交,然后将标记推送到远程repo,而不是写入源文件并创建新的提交
  • 构建脚本应该读取当前HEAD commit的标记,并将其用作发布版本的版本号
  • 或者,您可能希望使用
    git filter branch
    重写现有的git repo历史记录,标记以前的版本提交以保持一致性,删除并停止跟踪版本号源cile,然后删除这些CI提交

  • 关于你的第一个问题:

    我们怎样才能避免“无用”的CI提交,它只会增加 版本号

    请确认持续集成(CI)
    是一种开发实践,它通过自动构建来验证每个
    签入
    ,允许团队尽早发现问题

    话虽如此,我想在此阐明:

    • 从实践来看:每次提交都应该建立在集成的基础上 机器

    • 在“如何执行”下:CI服务器监视存储库并在发生更改时检查更改

    简单地说,CI服务器应该仅在有新提交时增强版本和,从而确保每个代码提交都是可发布的。

    从OP来看,您所在的地区有更多(如您所说)“无用的”
    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.