Continuous integration 在连续交付中构建版本控制

Continuous integration 在连续交付中构建版本控制,continuous-integration,continuous-delivery,Continuous Integration,Continuous Delivery,我对连续交付中的版本控制有一些具体问题。我想我理解全球工作流程或多或少是这样的: 1) Code 2) Push to version Control 3) Continuous Integration (unit, integration and end-to-end auto testing) 4) Artifacts deployment 版本控制呢?如何管理构建版本 假设我们正在使用语义版本控制进行一个基于Maven的项目:major.minor.build 当开发人员向VCS提交更改

我对连续交付中的版本控制有一些具体问题。我想我理解全球工作流程或多或少是这样的:

1) Code
2) Push to version Control
3) Continuous Integration (unit, integration and end-to-end auto testing)
4) Artifacts deployment
版本控制呢?如何管理构建版本

假设我们正在使用语义版本控制进行一个基于Maven的项目:
major.minor.build

当开发人员向VCS提交更改并且CI服务器执行生成时,CI服务器是否应增加生成版本并在VCS中创建标记

源代码中是否存在此生成版本?如果是这样,在每次推送到VCS之后,开发人员应该更新项目,因为CI服务器提交了项目上的更改(版本增量)


我有点困惑,我想以一种实用的方式理解CD工作流程。

一般来说,您应该:

  • 手动管理的版本号
  • 任何数量的“参考”编号
  • 如果您关心semver,或者您必须提供其他工具/库的兼容性信息,那么第一点是至关重要的。只有你才能判断一个新的“版本”是否会破坏任何东西——最流行的指示系统是遵循semver版本控制规则的

    第二点(“参考”编号)对您可能重要,也可能不重要。您通常不需要多个CI/CD版本号(每个流行的CI/CD服务都有一个版本号ID,该ID引用特定的“版本”)。这个数字的要点是,如果需要,您可以快速检查工件的相关CI/CD构建/日志

    如何合并两个(或更多)部分

    有单独的“版本”和“构建”编号并不少见。事实上,默认情况下,每个iOS项目都有这样的功能。在这种情况下,您可以手动管理“版本”号,并自动管理单独的“版本”号。构建编号可以是工件的名称,也可以在有人检索二进制文件的
    --版本
    信息时打印(例如:
    $brew info
    ->
    0.9.5(git修订版18c48;上次提交2015-11-02)

    或者,您可以将新组件添加到semver(
    x.x.x.BUILDNUM
    ),使用semver的最后一个组件(
    x.x.BUILDNUM
    ——如果您有严格递增的
    BUILDNUM
    ),我不建议这样做,或者只是在工件的名称中包含“build”编号

    这些都是可能的,您必须根据您的情况选择最佳的。您必须定义这些数字的含义,并决定数字应该显示在哪里(例如,它应该是
    --version
    调用的一部分,还是仅仅是文件名的一部分)


    编辑:若要思考您关于“CI服务器是否应该增加生成版本并在VCS中创建标记?”的问题,我绝对不建议这样做。CI服务器也可能有问题,您绝对不应该修改CI进程中的代码。意外覆盖(例如强制推送)有些事情可能非常危险。这就是为什么最好只使用CI/CD服务公开的内部版本号。

    您将在此处找到详细的解决方案

    我们的想法是使用maven插件jgit flow插件,使用Jenkins和这个插件,我们创建了整个管道来自动化这个过程

    版本控制呢?如何管理构建版本

    与其他方式相同;在生成要分发的工件时(通过云或软盘)工件和组件应标有唯一且可跟踪的版本号。该版本号应与创建它的源代码直接相关。我们这样做是因为它有助于我们正确修复生产系统中的问题、跟踪程序行为更改以及其他一些支持/维护/设计事项。我们应该这样做不管交付机制如何,都可以使用它,因为它很容易做到,而且在您没有能力将源代码与正在执行的程序联系起来的情况下,它可以为您节省很多麻烦,因为您将做出艰难的假设和猜测(您的工作和/或声誉岌岌可危)

    因此,请忽略另一个答案中给出的关于不标记回购的建议-始终标记回购

    此外,只要有可能,请尝试确保为要使用的生成生成的版本号已在正在生成的程序可执行文件或库中设置

    当开发人员向VCS提交更改并且CI服务器执行生成时,CI服务器是否应增加生成版本并在VCS中创建标记


    大多数构建系统都有版本控制或编号功能,[包括maven]…但是,只有生成部署的工件的构建才应该分配版本编号和标记repo。通常这将排除连续集成/门控签入构建,因为它们仅用于将传入的开发人员更改与主分支集成。

    有多种方法来实现这一点,具体取决于您的cir立场和目标一个可能比另一个更好。有许多“标准”书籍涵盖这些方法(“发布”是其中之一)。首先回答以下问题:您希望每个构建都产生一个唯一版本的工件。为什么?为什么不?或者您是“手动”(例如,在sprint之后)决定是时候发布一个新版本了?这个问题可能更适合于感谢!!你帮了我很多。还有一个问题,如果我选择将版本号放入工件并手动管理版本号,我想我应该在手动增加版本时标记VCS,而不是在每个版本中。我说得对吗?是的,我们通常有一个VCS在一个简单的版本文本文件中执行此操作的脚本。当我们想要增加版本号时,我们手动运行它,它会在版本文件中增加版本号,然后创建一个提交&标记。当然,您可以手动执行此操作,但更容易出错。作为参考,这是一个已清理的