我一直在处理我公司的CI扩展问题,同时试图弄清楚在CI和多个分支机构中采用哪种方法。在stackoverflow,多个功能分支和持续集成上也存在类似的问题。我开始了新的话题,因为我想进行更多的讨论并提供有关问题的一些分析。
到目前为止,我发现我可以采用2种主要方法(或者可能采取其他一些方法?)。
每个分支有多套工作(在这里谈论詹金斯/哈德森)
人们使用shell工具,ant脚本和Jenkins CLI解决此问题的一些示例。看到:
将在您的CI群集上造成更多负载
因此,似乎如果我想为开发人员提供针对其自定义分支的CI,则需要Jenkins的特殊工具(API或shellscript或其他东西?)并进行缩放。或者,我可以告诉他们更多地合并到DEV,并在定制分支上不使用CI地生活。您会选择哪一个?或者还有其他选择?
当谈到扩展CI时,实际上是在扩展CI服务器的使用,以处理您所有的功能分支以及主线。最初,这看起来是一种好方法,因为分支机构中的开发人员可以获得CI作业所包含的自动化测试的所有优势。但是,您在管理CI服务器作业时遇到了麻烦(就像您已经发现的一样),更重要的是,您实际上并没有在做CI。是的,您正在使用CI服务器,但是您并没有持续集成所有开发人员的代码。
执行真实的CI意味着您所有的开发人员都将定期提交主线。说起来容易,但难的是要做到这一点而不会破坏您的应用程序。我强烈建议您查看持续交付,尤其是
第13章:管理组件和依赖项中 的“ 保持应用程序可发布” 部分。要点如下: __
- 隐藏新功能,直到完成为止(又称为Feature
Toggles
)。- 以一系列小的更改为增量进行所有更改,每个小更改都是可发布的。
- 使用抽象分支来对代码库进行大规模更改。
- 使用组件解耦应用程序中以不同速率变化的部分。
除了通过抽象进行分支外,它们非常容易解释。这只是一个花哨的名词:
- 在需要更改的系统部分上创建一个抽象。
- 重构系统的其余部分以使用抽象层。
- 创建一个新的实现,直到完成,该实现才成为生产代码路径的一部分。
- 更新您的抽象层以委托给新的实现。
- 删除旧的实现。
- 如果不再合适,请删除抽象层。
第14章“高级版本控制”中 “ 分支,流和持续集成” 部分的以下段落总结了影响。 __
与创建分支机构并投入工夫来重新架构和开发新功能相比,渐进式方法无疑需要更多的纪律和关怀-
实际上确实需要更多的创造力。但这大大降低了更改破坏应用程序的风险,并将为您和您的团队节省大量时间,以解决合并问题,并使应用程序进入可部署状态。
放弃功能分支需要花费很多心思,您总是会遇到阻力。以我的经验,这种抵制是基于开发人员对主线提交代码感到不安全,这是一个合理的考虑。反过来,这通常是由于缺乏对上述技术的知识,信心或经验,并且可能是由于对自动化测试缺乏信心。前者可以通过培训和开发人员支持来解决。后者是一个非常困难的问题,但是分支并不能提供任何额外的实际安全性,它只是推迟了这个问题,直到开发人员对代码有足够的信心为止。
translated_page: https://github.com/PX4/Devguide/blob/master/en/test_and_ci/continous_integration.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e PX4 Continuous Integration PX4 builds and
我们做的还不够好,先占个坑。 欢迎贡献章节。
注意有关编写测试的建议, 请参阅 Testing Your Code. Why? 与 Kent Beck 一起撰写关于 持续集成 (简称 : CI ) 的 Martin Fowler 对 CI 进行了如下的描述: 持续集成是一种软件开发实践,团队成员经常整合他们的工作,通常每个人至少每天集成一次 - 导致每天进行多次集成。 每个集成都通过自动构建(包括测试)进行验证,以尽快检测集成错误。 许多团队
对应于 Ruby 的一个或多个版本,你很轻松就可以测试你的网站构建。以下指引将展示怎样在 Travis 上建立一个免费的,集成了处理 pull 请求的 GitHub 的构建环境。如果你使用私有代码库的话,也有相应的付费选择。 1. 启用 Travis 以及 Github 启用 Travis 来构建你的 Github 代码库非常简单: 前往你在 travis-ci.org 的个人档案: https:
持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。由于我们的代码托管在github上面,所以选择Travis CI来做持续集成是一个不错的选择。 要触发构建工作,需要在项目根目录下面添加一个.travis.yml的文件: sudo: required services: - docker e
虽然以下示例中使用在Travis CI,但原则上应该,也可以直接转移到其他持续集成提供商. 以下是Travis CI的.travis.yml示例,确保配置了mdbook build和mdbook test运行成功。加快CI运转时间的关键是缓存mdbook的安装,以便您可以不用每次CI运行就编译一次mdbook。 language: rust sudo: false cache: - carg