首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更新gitlab CI/CD中的子模块

如何更新gitlab CI/CD中的子模块
EN

Stack Overflow用户
提问于 2021-01-28 23:30:22
回答 1查看 3.6K关注 0票数 1

我在下面的树中组织了一个项目

代码语言:javascript
运行
复制
|.
|..
|-- devops
|-- project1
|-- project2

在devops文件夹中,我将其他两个项目作为子模块,因为这两个项目是由两个不同的团队独立开发的。

代码语言:javascript
运行
复制
|.
|..
|-- project1@0deed0fa
|-- project2@0beef0fb
|-- .gitlab-ci.yml

我已经设置了用于部署项目的管道。每当在任何项目上有新的提交时,都会设置一个触发器来运行devops项目管道。作为devops作业的一部分,我运行git submodule命令来获取和合并。那就建吧。它起作用了。

我遇到的问题是,在一段时间内,对子模块做了很多修改。每次对任何项目进行提交时,都会重放从最后一个子模块提交到devops项目文件夹的更改。每月一次,我手动更新devops项目文件夹,并更新到子模块项目的最新提交。我可以提交来自devops管道任务的更改,但是这将在同一个devops管道中生成新的管道。(我没有测试它,但这似乎很明显)。

有没有办法将子模块更新为最新提交,作为devops管道的一部分?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-30 16:03:39

只构建一次二进制文件

使用git子模块并不是实现集成管道的最佳实践。开创性的书连续交付Only Build Your Binaries Once一节(第5章)中说明如下:

许多构建系统使用版本控制系统中保存的源代码作为规范源代码,用于许多步骤。在提交过程中,代码将在不同的上下文中反复编译,同样是在验收测试时,等等。每次编译代码时,都有引入一些差异的风险。

而且,重新编译需要花费大量时间,从而导致反馈周期更长。建议如下:

在构建的提交阶段,您应该只构建一次二进制文件。这些二进制文件应该存储在某个文件系统中.在管道的后期阶段,很容易检索到它们。

CI/CD管道流

遵循此范例,您的工作流程将如下所示:

  1. project1project2中处理特性分支的开发人员将推动提交。
  2. 一个项目管道被触发,构建二进制文件,运行单元/组件测试,包容器。
  3. 如果一切都通过,二进制文件或容器将被部署到“开发”存储库中。
  4. 项目管道将触发下游的devops管道,该管道将从存储库下载二进制文件/容器的。
  5. devops管道集成部分并运行端到端测试。
  6. 如果E2E测试通过,二进制文件/容器将被部署到release存储库(也称为升级)。
  7. 如果您正在进行持续交付,您可以在这里部署到生产部门,但是许多团队更喜欢在手工作业中按下按钮

注意源代码是如何构建一次的。

流行二进制存储库

有许多流行的二进制存储库可用。大多数都有免费的付费专业版。查看他们的网站以获得更多信息。

  1. GitLab工件 (在各阶段或管道之间)
  2. GitLab包注册表GitLab容器注册表
  3. GitHub包注册表GitHub容器注册表
  4. JFrog艺术
  5. Nexus储存库
  6. 云存储容器注册中心(AWS ECRGCP CRAzure CR)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65946723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档