【问题标题】:Versioning, CI, build automation best practices版本控制、CI、构建自动化最佳实践
【发布时间】:2016-08-30 14:08:47
【问题描述】:

我正在寻找有关版本控制软件的最佳实践的建议。

背景

使用 gradle 构建自动化。

与 Jenkins 持续集成

CVS 作为 SCM

语义版本控制

Sonatype Nexus 内部回购

问题

假设我对代码进行了更改。一个自动化的 CI 作业会将其拉入并针对它运行一些测试。如果这些测试应该通过,Jenkins 是否应该更新代码版本并将其推送到 nexus?它应该被推高为“SNAPSHOT”吗?应该将它推到 nexus 上,还是直接留在存储库中,直到我想要发布?

提前致谢

【问题讨论】:

    标签: version-control continuous-integration versioning


    【解决方案1】:

    我知道你说你在使用 CVS,但首先,你检查过 git-flow 方法吗? http://nvie.com/posts/a-successful-git-branching-model/

    我对 CVS 的经验很少,但它可以应用于它,一个好的版本控制和 CI 程序从定义明确的分支开始,基本上至少一个用于最新版本,一个用于最新的开发版本.

    通过它,您可以告诉 CI 应用程序正在使用什么。


    之前没有时间给出更详细的答案,所以我现在将扩展,尝试给出一个一般性的答案。

    分支机构

    一旦您明确定义了分支,您就可以控制您的工作流程。例如,通常有一个“master”和一个“develop”分支,其中 master 将包含最新版本,develop 将包含下一个版本。

    这意味着您始终可以指向代码的最新版本,它位于 master 分支,而下一个版本位于 develop 分支。当然,这可以更详细一些,例如为各个版本标记 master 分支,或者为每个主要功能添加一个额外的分支,但有这两个就足够了。

    接下来,如果您需要对代码进行更改,请编辑开发分支,并确保一切正确,然后继续进行更改,直到您对当前版本感到满意,然后将此代码移至 master .

    测试

    现在,如何确保所有内容都是正确和有效的?通过在您的项目中包含测试。有很多关于测试的内容可以阅读,但让我们保持简单。有两种主要类型的测试:

    • 白盒测试,您可以在其中了解代码的内部情况,并为具体实现准备测试,确保按照您的意愿构建它
    • 黑盒测试,您不知道代码是如何实现的(或者至少,您表现得好像不知道),并准备更通用的测试,以确保其按预期工作

    现在,进入下一步,你不会听到太多关于这两个测试的信息,而是人们会谈论以下几个:

    • 单元测试,您可以在其中测试尽可能小的代码
    • 集成测试,您可以在其中连接几段代码并对其进行测试

    “可能的最小代码段”有很多不同的含义,具体取决于人和项目。但是为了简化,如果你不能对它进行白盒测试,那么你就是在创建一个集成测试。

    集成测试包括数据库访问、运行服务器等内容,并且需要很长时间。至少比单元测试长得多。此外,由于其复杂性,集成测试可能需要设置特定的环境。

    这意味着虽然单元测试可以轻松地在本地运行,但集成测试可能太慢以至于人们不喜欢运行它们,或者可能根本无法在您的机器上运行。

    那你是做什么的?简单,分离测试,因此每次更改后可以在本地运行单元测试,而每次提交后由 CI 服务器运行集成测试(在单元测试之后)。

    附加测试

    作为评论,不要停留在这种简化的测试愿景上。有几种处理测试的方法,有些测试我不适合单元测试或集成测试。例如,验证代码样式规则总是一个好主意,或者您可以进行一个测试,将项目部署到服务器中,以确保它不会中断。

    CI

    您的 CI 服务器应该监听提交,如果配置正确,它将知道该提交来自开发版本、发布或其他任何内容。允许您根据需要自定义流程。

    首先它应该运行所有的测试。没有任何借口,不用担心,如果需要两个小时,它应该会运行所有测试,因为这是防止未来出现问题的屏障。

    如果出现错误,CI 服务器将停止并发送警告。修复代码并重新开始。如果所有测试都通过了,那么恭喜。

    现在是部署的时候了。

    部署时应始终小心谨慎。依赖项存储库中可用的最新版本应该始终是最新版本。

    很高兴有一个脚本在提交后将版本部署到存储库中,但除非您没有最终验证,即手动人工控制的验证,否则您可能会最终发布一个错误的版本。

    当然,对于开发版本,您可以忽略这一点,只要它们与实际版本分离,否则最好手动处理最终部署。

    嗯,它可能带有脚本或任何你喜欢的东西,但应该是你开始部署版本,而不是机器。

    CI 定制

    拥有 CI 服务器不仅可以进行测试和构建。

    你喜欢报告吗?然后生成测试覆盖率报告、质量指标报告或您喜欢的任何内容。您为此使用外部服务吗?然后把文件发给他,让它工作。

    您的项目包含生成文档的文件?构建它并将其存储在某个地方。

    【讨论】:

    • 感谢您的回复。没有完全回答我的问题,但提供了一些关于版本控制、发布和 git 的好信息。但是,我确实更喜欢here 描述的模型
    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2010-09-24
    • 2012-03-22
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多