如何解决如何更新 gitlab CI/CD 中的子模块 只构建一次二进制文件CI/CD 管道流程流行的二进制代码库
我在下面的树中组织了一个项目
|.
|..
|-- devops
|-- project1
|-- project2
在 devops 文件夹中,我将另外两个项目作为子模块包含在内,因为这两个项目是由两个不同的团队独立开发的。
|.
|..
|-- project1@0deed0fa
|-- project2@0beef0fb
|-- .gitlab-ci.yml
我已经设置了用于部署项目的管道。每当任何项目有新提交时,都会设置触发器来运行 devops
项目管道。作为 devops 作业的一部分,我运行 git submodule
命令来获取和合并。然后构建。它有效。
我遇到的问题是,在一段时间内,对子模块进行了很多更改。每次提交任何项目时,都会重放从最后一个子模块提交到 devops 项目文件夹的更改。每月一次,我手动更新 devops
项目文件夹并更新到子模块项目的最新提交。我可以提交来自 devops 管道任务的更改,但这将在同一个 devops 管道中生成新管道。 (我没有测试过,但看起来很明显)。
有什么方法可以将子模块更新到最新提交作为 devops 管道的一部分吗?
谢谢。
解决方法
只构建一次二进制文件
使用 git 子模块不是实现集成管道的最佳实践。开创性著作 Continuous Delivery 在 Only Build Your Binaries Once
部分(第 5 章)中陈述了以下内容:
许多构建系统使用版本控制系统中保存的源代码作为许多步骤的规范源代码。在提交过程中,代码将在不同的上下文中重复编译,在验收测试时再次编译,[等等] 每次编译代码时,都会冒引入一些差异的风险。
另外,重新编译需要很多时间,导致反馈周期更长。建议是:
在构建的提交阶段,您应该只构建一次二进制文件。这些二进制文件应该存储在文件系统中的某个位置[...],以便在管道的后期阶段轻松检索它们。
CI/CD 管道流程
按照此范例,您的工作流程将如下所示:
- 在
project1
和project2
中处理功能分支的开发人员将推送提交 - 触发项目管道构建二进制文件、运行单元/组件测试和打包容器
- 如果一切顺利,二进制文件或容器将部署到“开发”存储库
- 项目管道将触发您的下游 DevOps 管道,该管道将从存储库下载二进制文件/容器。
- devops 管道集成了各个部分并运行端到端测试
- 如果 E2E 测试通过,二进制文件/容器将部署(也称为提升)到
release
存储库 - 如果您正在进行持续交付,您会在这里部署到生产环境,但许多团队更喜欢在手动作业中按下按钮
注意源代码如何只构建一次。
流行的二进制代码库
有许多流行的二进制存储库可用。大多数都有免费和付费的专业版。查看他们的网站了解更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。